开发者

mybatis Example Criteria like 模糊查询问题

开发者 https://www.devze.com 2023-02-28 10:33 出处:网络 作者: Chandler丶
目录简介Criteria类简单实例生成简单的WHERE子句复杂查询模糊查询实战总结用MyBATis代码生成工具会产生很多个XXXExample类,这些类的作用是什么?
目录
  • 简介
    • Criteria类
  • 简单实例
    • 生成简单的WHERE子句
    • 复杂查询
  • 模糊查询实战
    • 总结

      用MyBATis代码生成工具会产生很多个XXXExample类,这些类的作用是什么?

      查阅了很多资料,在这里总结归纳一下

      简介

      XXXExample类用于构造复杂的筛选条件

      它包含一个名为Criteria的内部静态类,它包含将在where子句中一起结合的条件列表。

      Criteria类的集合允许您生成几乎无限类型的where子句。

      可以使用createCriteria方法或or方法创建Criteria对象。

      当使用createCriteria方法创建第一个Criteria对象时,它会自动添加到Criteria对象列表中 -

      如果不需要其他子句,则可以轻松编写简单的Where子句。使用or方法时,Criteria类将添加到所有实例的列表中。

      官方建议仅使用or方法创建Criteria类。这种方法可以使代码更具可读性。

      Criteria类

      Criteria内部类包括每个字段的andXXX方法,以及每个标准SQL谓词

      包括:

      字段方法含义
      IS NULL表示相关列必须为NULL
      IS NOT NULL表示相关列不能为NULL
      =(等于)表示相关列必须等于方法调用中传入的值
      <>(不等于)表示相关列不能等于方法调用中传入的值
      >(大于)表示相关列必须大于方法调用中传入的值
      > =(大于或等于)表示相关列必须大于或等于方法调用中传入的值
      <(小于)表示android相关列必须小于方法调用中传入的值
      <=(小于或等于)表示相关列必须小于或等于方法调用中传入的值
      LIKE意味着相关列必须“类似”方法调用中传入的值。代码不会添加所需的’%’,您必须自己在方法调用中传入的值中设置该值。
      NOT开发者_JS开发 LIKE意味着相关列必须“不喜欢”方法调用中传入的值。代码不会添加所需的’%’,您必须自己在方法调用中传入的值中设置该值。
      BETWEEN意味着相关列必须“在”方法调用中传入的两个值之间。
      NOT BETWEEN意味着相关列必须“不在”方法调用中传入的两个值之间。
      IN表示相关列必须是方法调用中传入的值列表之一。
      NOT IN表示相关列不能是方法调用中传入的值列表之一。

      简单实例

      生成简单的WHERE子句

       TestTableExample example = new TestTableExample();
       example.createCriteria().andField1EqualTo(5);

      或者

       TestTableExample example = new TestTableExample();
       example.or().andField1EqualTo(5);

      实际上动态生成的where子句是这样

      where field1 = 5

      复杂查询

      TestTableExample ttnGYawjexample = 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()
        .anttnGYawjdField5In(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)

      可以通过在任何示例类上调用setDistinct(true)方法来强制查询为DISTINCT。

      模糊查询实战

      自己根据理解配合PageHelper做了一个简单的多条件模糊查询加深理解

      具体实现如下,支持多个字段的同时搜索

          PageHelper.startPage(pageNum,pageSize);
          TbBrandExample example = new TbBrandExample();
          TbBrandExample.Criteria criteria = example.createCriteria();
          if (tbBrand != null) {
            if (tbBrand.getName() != null && tbBrand.getName().length()>0) {编程客栈
              criteria.andNameLike("%"+tbBrand.getName()+"%");
            }
            编程客栈if (tbBrand.getFirstChar() != null && tbBrand.getFirstChar().length()>0) {
              criteria.andFirstCharLike("%"+tbBrand.getFirstChar()+"%");
            }
          }
          Page<TbBrand> page = (Page<TbBrand>) brandMapper.selectByExample(example);
          return new PageResult((int) page.getTotal(),page.getResult());

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号