• mybatis Example Criteria like 模糊查询


    用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
    =(等于) 表示相关列必须等于方法调用中传入的值
    <>(不等于) 表示相关列不能等于方法调用中传入的值
    >(大于) 表示相关列必须大于方法调用中传入的值
    > =(大于或等于) 表示相关列必须大于或等于方法调用中传入的值
    <(小于) 表示相关列必须小于方法调用中传入的值
    <=(小于或等于) 表示相关列必须小于或等于方法调用中传入的值
    LIKE 意味着相关列必须“类似”方法调用中传入的值。代码不会添加所需的’%’,您必须自己在方法调用中传入的值中设置该值。
    NOT 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
    1
    复杂查询
    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)

    可以通过在任何示例类上调用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());

  • 相关阅读:
    List的Select 和Select().tolist()
    lambda中FirstOrDefault和First
    EF时,数据库字段和实体类不一致问题
    用户变量问题
    实验十二:字符串和结构
    实验十一:指针(2)
    实验十:指针(1)
    实验九:二维数组和字符数组的应用
    实验八:一维数组的应用
    实验七:函数及数组(1)
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/12014362.html
Copyright © 2020-2023  润新知