用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());

mybatis Example Criteria like 模糊查询的更多相关文章

  1. 【Mybatis】【3】mybatis Example Criteria like 模糊查询

    正文: 在Java中使用Mybatis自动生成的方法,like需要自己写通配符 public List<TableA> query(String name) { Example examp ...

  2. Mybatis使用MySQL进行模糊查询时输入中文检索不到结果

    Mybatis使用MySQL进行模糊查询时输入中文检索时,需要在jdbcURL后增加参数   ?useUnicode=true&characterEncoding=UTF-8

  3. mybatis框架入门程序:演示通过mybatis实现数据库的模糊查询操作

    1. mybatis的基本准备操作见我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10149480.html 2. 根据用户名查询用户信息: (1)映射文件 ...

  4. MyBatis Plus之like模糊查询中包含有特殊字符(_、\、%)

    传统的解决思路:自定义一个拦截器,当有模糊查询时,模糊查询的关键字中包含有上述特殊字符时,在该特殊字符前添加\进行转义处理. 新的解决思路:将like 替换为 MySQL内置函数locate函数 参考 ...

  5. MyBatis动态SQL与模糊查询

    sqlxml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC & ...

  6. mybatis中根据日期模糊查询

    首先设置起始日期startDate和结束日期endDate,数据库中日期字段为achive_time,表名为dos_dossier<select id="getDossiers&quo ...

  7. mybatis 动态Sql的模糊查询

    where teacher.tname like concat(concat(#{tName}),'%') 2:distinct的使用 下面先来看看例子: table    id name    1 ...

  8. Mybatis中的like模糊查询四种方式

    1.  参数中直接加入%% param.setUsername("%CD%"); param.setPassword("%11%"); <select i ...

  9. Mybatis中的like模糊查询

    1.  参数中直接加入%% param.setUsername("%CD%");      param.setPassword("%11%"); <sel ...

随机推荐

  1. linux ftp虚拟用户的创建

    学习目标: 匿名用户的登录,添加用户的登录,虚拟用户的创建. 虚拟用户的创建: 1.安装:yum -y install vsftpd    服务端 yum -y install ftp         ...

  2. 【OGG】OGG的单向复制配置-支持DDL(二)

    [OGG]OGG的单向复制配置-支持DDL(二) 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的 ...

  3. weblogic如何修改密码&密码找回

    一.修改Console密码后,挂载的服务无法重启[解决办法] 1. 打开weblogic控制台,安全领域 --> myrealm --> 用户和组,将会看到weblogic用户,可以直接删 ...

  4. 为什么说pt-osc可能会引起主从延迟,有什么好办法解决或规避吗?

    若复制中binlog使用row格式,对大表使用pt-osc把数据从旧表拷贝到临时表,期间会产生大量的binlog,从而导致延时 pt-osc在搬数据过程中insert...select是有行锁的,会降 ...

  5. 了解 npm install -S -D 的区别,看这篇就完事了

    一.npm install -S -D 的区别 npm install module_name -S 即 npm install module_name --save 写入dependencies n ...

  6. Linux DHCP 中继

    具体到一个公司的网络环境中,不可能只有一个VLAN,更不可能对每个VLAN都架设一个DHCP服务器,这时就要做一个DHCP的中继,使得DHCP的广播可以通过VLAN. 实验拓扑 三层交换机下面连接一台 ...

  7. Electrification Plan 最小生成树(prim+krusl+堆优化prim)

    题目 题意: 无向图,给n个城市,n*n条边,每条边都有一个权值 代表修路的代价,其中有k个点有发电站,给出这k个点的编号,要每一个城市都连到发电站,问最小的修路代价. 思路: prim:把发电站之间 ...

  8. Kotlin反射实践操作详解

    继续对反射进行实战. 获取构造方法: 先定义一个主构造方法,2个次构造方法,接下来咱们用反射来获取一下构造方法: 其结果: [fun <init>(kotlin.Int, kotlin.S ...

  9. 小程序登录及AppSecret(小程序密钥)

    在授权开发以后,需要提交小程序密钥,有小程序密钥第三方才有能力获取用户的一些信息,提供一些能力! 平台分别提供多种方式实现微信登录: 1. 调用wx.login接口,静默获取openid 适用场景:无 ...

  10. SQL异常总结

    1.resultType和resultMap写错时,启动时就会报错 原因: 2.The error occurred while handling results ### SQL: select US ...