Mybatis generator学习笔记

Mybatis generator学习笔记

Example Class使用

前言:Spring Boot 整合Mybatis-generator会出现许许多多的xxxExample的java类,本文将以此为背景来介绍Example Class使用。

承接上篇博客:https://blog.csdn.net/qq_43706066/article/details/102594527

官方文档:http://mybatis.org/generator/generatedobjects/exampleClassUsage.html

Example class 指定怎么创建一个动态的where条件。 每一个在表中的non-BLOB 列可以有选择地被包含在where查询语句中. Examples 是规范 class 的使用的最好的一个方式(官方这么说的)。

Example class 可以被用在生成不受限制的 where 条件.

Example class 包含一个静态类,叫做 Criteria 。这个类有一个使用anded来连接的where子句中的条件列表。 Example class 有一个 Criteria 类型的List类,所有在Criteria类中的子句会用 ored 组合在一起。 使用不同属性的 Criteria 类可以生成不受限制的where子句.

Criteria 对象可以被createCriteria 方法或者 or 方法来创建. 如果 Criteria 对象是用 createCriteria() 创建的,它会自动为 List<Criteria> 属性添加一个 Criteria 对象 - 这使得它更容易写一个简单的where子句, 如果您不需要 or 或者其他几个子句组合的话. 用 or(Criteria criteria) 方法创建 Criteria 对象, 方法里的 criteria 对象会被添加进 Criteria 对象的列表中.

注意:推荐使用 or 方法来创建Criteria .可以提高代码的可读性。

其实说那么多也没用,直接上代码

1.首先我们要让容器知道我们mybaitis操作数据库的xml文件的位置,所以要在Application.properties/Application.yml文件中配置mapper-locations:

mybatis.mapper-locations=classpath:/mapper/*.xml
#yml文件写法会稍有不同

2.然后告诉我们的Spring容器我们Spring整合Mybatis的对应Mapper接口的包在哪儿,然后让IOC容器去扫描这个包:

在我们的项目的入口文件(即xxxxApplication.java:其中xxxx是你的项目名)添加一个注解

@MapperScan("Mapper类所在的包的路径")//例:com.demo.dao

3.下面就开始写测试代码(注:建议使用Spring boot自带的Test模块,因为它自带Spring的IOC容器,如果自己写测试类的话,记得给测试类配置上IOC容器,不然无法自动注入)

​ 先说套路,先创建xxxxExample对象,然后创建对应的Criteria对象,然后给创建的Criteria对象附上你要操作的方法,然后直接调用接口里面的对应的方法,参数就放我们新建的xxxExample对象

​ 1)countByExample(Example example)方法

@RunWith(SpringRunner.class)
@SpringBootTest
public class demoTest {
    @Autowired
    UserMapper userMapper;
    @Test
    public void testExample(){
        //        创建UserExample对象
        UserExample example = new UserExample();
        //       给UserExample对象创建Criteria(规范/标准)对象
        UserExample.Criteria criteria = example.or();
        //      添加规范
        criteria.andIdEqualTo(1);
        //        输出结果
        int i = userMapper.countByExample(example);
        System.out.println(i);
    }
}

//输出结果是 1 正确!

​ 上述的方法查找了id=1的记录总数,我们可以用很多方法来替代andIdEqualTo()实现许许多多的操作计数的方法。相当于SQL语句:select count(*) from user where id = 1;

2)deleteByExample(Example example)

		//        创建UserExample对象
        UserExample example = new UserExample();
        //       给UserExample对象创建Criteria(规范/标准)对象
        UserExample.Criteria criteria = example.or();
        //      添加规范
       criteria.andEmailLike("%126%");
        //        输出结果
        userMapper.deleteByExample(example);

删除了数据库中所有Email字段带有126这个字符串的所有数据,相当于SQL语句:delete from user

where email like ‘%126%’;

3)selectByExample(Example example)

  		//        创建UserExample对象
        UserExample example = new UserExample();
        //       给UserExample对象创建Criteria(规范/标准)对象
        UserExample.Criteria criteria = example.or();
        //      添加规范

        //        输出结果
        List<User> users = userMapper.selectByExample(example);
        for (User user : users) {
            System.out.println(user);
        }

上面代码我虽然创建了criteria对象,但没有对criteria对象做任何操作,所以这里就将数据库所有数据都查询了出来,相当于SQL语句:select * from user ;

  1. updateByExampleSelective(xxxx x,xxxxExample xexample)

xxxx:指代创建的类(我这里是User类)

xxxxExample:指代对应的Example类(我这里是UserExample类)

public void testExample(){
        User user = new User();
        user.setId(1001);
        user.setName("test");
        user.setEmail("test@qq.com");
        //        创建UserExample对象
        UserExample example = new UserExample();
        //       给UserExample对象创建Criteria(规范/标准)对象
        UserExample.Criteria criteria = example.or();
        //      添加规范
        criteria.andNameEqualTo("123");
        //        输出结果
        int i = userMapper.updateByExampleSelective(user,example);
        System.out.println(i);
    }

上面代码的意思是将新创建的User类来替换数据库中name字段为123的记录,实现了更改操作,相当于SQL语句: update user set id=1001,name=‘test’,email= ‘test@qq.com’ where name = ‘123’;

例子就举到这里,大家可能也发现了,组合太多了,我也不可能在这里举完例子,所以来看官方给

的例子和一些我未提及的概念,帮助大家更好的理解。

4.简单查询

这个例子展示了如何用生成后的Example类去生成一个简单的where子句:

  TestTableExample example = new TestTableExample();

  example.createCriteria().andField1EqualTo(5);
  //createCriteria()跟or()作用相同
/*=====================================================*/
//这是他的源码
 public Criteria or() {
        Criteria criteria = createCriteriaInternal();
        oredCriteria.add(criteria);
        return criteria;
    }

    public Criteria createCriteria() {
        Criteria criteria = createCriteriaInternal();
        if (oredCriteria.size() == 0) {
            oredCriteria.add(criteria);
        }
        return criteria;
    }
//源码结束

作为另一种选择, 下面的方式也是可以的:

  TestTableExample example = new TestTableExample();

  example.or().andField1EqualTo(5);

在上面的例子中, 动态生成的where子句是:

  where field1 = 5;
5.复杂查询

下面的例子展示了如何用生成后的Example类去生成一个复杂的where子句 (用到了 JSE 5.0 的泛型):

  TestTableExample example = new TestTableExample();

  example.or().andField1EqualTo(5).andField2IsNull();

  example.or().andField3NotEqualTo(9).andField4IsNotNull();

  List<Integer> field5Values = new ArrayList<Integer>();
  field5Values.add(8);
  field5Values.add(11);
  field5Values.add(14);
  field5Values.add(22);

  example.or().andField5In(field5Values);

  example.or().andField6Between(3, 7);

在上面的例子中, 动态生成的where子句是:

  where (field1 = 5 and field2 is null)
     or (field3 <> 9 and field4 is not null)
     or (field5 in (8, 11, 14, 22))
     or (field6 between 3 and 7)

将会返回满足这些条件的记录结果.

6.去重复查询

​ 您可以在所有的Example类中调用 setDistinct(true) 方法进行强制去重复查询.

7.概念
  1. Criteria类

    Criteria 内部类的每个属性都包含 andXXX 方法,以及如下的标准的SQL查询方法:

    IS NULL - 指相关的列必须为NULL

    IS NOT NULL - 指相关的列必须不为NULL

    = (equal) - 指相关的列必须等于方法参数中的值

    <> (not equal) - 指相关的列必须不等于方法参数中的值

    (greater than) - 指相关的列必须大于方法参数中的值

    = (greater than or equal) - 指相关的列必须大于等于方法参数中的值

    < (less than) - 指相关的列必须小于于方法参数中的值

    <= (less than or equal) - 指相关的列必须小于等于方法参数中的值

    LIKE - 指相关的列必须 “like” 方法参数中的值. 这个方法不用必须加入 ‘%’, 您必须设置方法参数中的值.

    NOT LIKE - 指相关的列必须 “not like” 方法参数中的值. 这个方法不用必须加入 ‘%’, 您必须设置方法参数中的值.

    BETWEEN - 指相关的列必须在 “between” 方法参数中的两个值之间.

    NOT BETWEEN - 指相关的列必须不在 “not between” 方法参数中的两个值之间.

    IN - 指相关的列必须在传入的方法参数的list中.

    NOT IN - 指相关的列必须不在传入的方法参数的list中.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值