MyBatis-Generator使用MyBatis3进行代码生成

部署运行你感兴趣的模型镜像

自动生成的MyBatis3样式的代码,会给每个Java对象创建一个额外的Example对象。
在这里插入图片描述
这个Example对象主要是用来进行复杂查询的,它里面有一个静态内部类Criteria,可以理解为专门用来保存查询条件的类。
在这里插入图片描述
在进行复杂条件查询时,有专门的语句,studentDao为类对应的接口,而example表示存储查询条件即Criteria的对象,对应你要查询的Java对象(Student)的MBG帮你创建的。

List<Student> students = studentDao.selectByExample(example);

当我们要进行复杂条件查询时:
首先创建一个Java对象复杂查询的对象即xxxx对象对应的xxxxExample对象。

StudentExample example = new StudentExample();

然后通过example创建一个Criteria对象:

StudentExample.Criteria criteria2 = example.createCriteria();

Criteria是继承了GeneratedCriteria类,GeneratedCriteria类中有很多判断条件,都是大部分都是and。
在这里插入图片描述
在这里插入图片描述
如果想要进行or条件的判断,需要使用两个criteria进行组合。

        StudentExample.Criteria criteria = example.createCriteria();
        criteria.andNameLike("%飞%").andAgeGreaterThan(15L);
        StudentExample.Criteria criteria2 = example.createCriteria();
        criteria2.andNameLike("%张%");
        example.or(criteria2);// 进行组合

最终拼接的sql语句应该是:

select id,name,email,age from student where (name like "%飞%" and age > 15) or (name like "%张%")

同时应该注意Criteria创建的先后顺序:
or中的参数只能是后创建的Criteria对象!!!

否则会出现错误。
下面是or中参数为先创建的Criteria对象,拼接结果为:

select id, name, email, age from student WHERE ( name like ? ) or( name like ? ) 

底层可能是使用栈来进行Criteria的存储。每次进行or操作,stack执行pop()两次,将第二次pop获得的Criteria和第一次pop得到的Criteria进行拼接(将传入参数和pop两次操作后的Criteria进行拼接):

c1 = createrCriteria();
c2 = createrCriteria();
栈中的顺序:栈底 c1,c2 栈顶 
c2 = stack.pop();
c1 = stack.pop();
拼接=====> c1 or c2

如果or中的参数是第一次创建的criteria(即最先入栈的c1),那么执行or操作时

拼接结果:c1 or c1

完整测试代码:

@Test
    public void test02(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
//        1、封装查询对象example
        StudentExample example = new StudentExample();
//        2、创建一个criteria,criteria就是拼装查询的条件
//        若要进行or条件的判断,可使用critera进行拼接
        StudentExample.Criteria criteria = example.createCriteria();
        criteria.andNameLike("%飞%").andAgeGreaterThan(15L);
                StudentExample.Criteria criteria2 = example.createCriteria();
        criteria2.andNameLike("%张%");
//        3、所有的复杂条件都是通过selectByExample进行查询的,传入一个example对象,因为criteria是student一个属性
//        将后面创建的criteria使用or条件拼接:注意只能按顺序来
        example.or(criteria2);
        List<Student> students = studentDao.selectByExample(example);
        for (Student student : students) {
            System.out.println(student);
        }
    }

您可能感兴趣的与本文相关的镜像

Seed-Coder-8B-Base

Seed-Coder-8B-Base

文本生成
Seed-Coder

Seed-Coder是一个功能强大、透明、参数高效的 8B 级开源代码模型系列,包括基础变体、指导变体和推理变体,由字节团队开源

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值