mybatis Example Criteria like 模糊查询

本文详细介绍了MyBatis代码生成工具中产生的XXXExample类的作用及其内部Criteria类的使用方法,通过实例展示了如何利用这些类进行简单及复杂的查询操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用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
  • 复杂查询
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());
### TkMyBatis 模糊查询 示例 在使用 TkMyBatis 进行模糊查询时,可以利用 `Example` 类来构建复杂的查询条件。对于模糊匹配的需求,可以通过 `LikeWrapper` 或者直接在 `Example.Criteria` 中指定 `%` 符号来进行模式匹配。 #### 方法一:基于 Example 的模糊查询 当需要执行简单的单字段模糊查询时,可以在创建 Criteria 后调用 andLike 方法并传递含有通配符的字符串作为参数[^3]: ```java // 创建示例对象实例化 Example example = new Example(OpUserInfo.class); // 添加查询条件 example.createCriteria().andLike("name", "%" + keyword + "%"); // 执行查询操作返回结果集 List<OpUserInfo> list = mapper.selectByExample(example); ``` 此代码片段展示了如何通过给定的关键字对 name 属性做前后缀都允许任意字符存在的模糊搜索。 #### 方法二:多字段组合模糊查询 如果涉及多个属性的同时模糊匹配,则可在同一个 criteria 下连续追加更多 like 表达式[^5]: ```java Example example = new Example(OpUserInfo.class); Example.Criteria criteria = example.createCriteria(); criteria.andLike("firstName", "%" + firstNameKeyword + "%") .andLike("lastName", "%" + lastNameKeyword + "%"); List<OpUserInfo> users = mapper.selectByExample(example); ``` 上述例子说明了怎样针对 first_name 和 last_name 两个不同列实施联合模糊检索。 需要注意的是,在实际应用中应当考虑输入验证以避免潜在的安全风险如 SQL 注入等问题;另外还要注意数据库性能优化方面的影响因素比如索引设计等[^2]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值