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());
mybatis Example Criteria like 模糊查询的更多相关文章
- 【Mybatis】【3】mybatis Example Criteria like 模糊查询
正文: 在Java中使用Mybatis自动生成的方法,like需要自己写通配符 public List<TableA> query(String name) { Example examp ...
- Mybatis使用MySQL进行模糊查询时输入中文检索不到结果
Mybatis使用MySQL进行模糊查询时输入中文检索时,需要在jdbcURL后增加参数 ?useUnicode=true&characterEncoding=UTF-8
- mybatis框架入门程序:演示通过mybatis实现数据库的模糊查询操作
1. mybatis的基本准备操作见我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10149480.html 2. 根据用户名查询用户信息: (1)映射文件 ...
- MyBatis Plus之like模糊查询中包含有特殊字符(_、\、%)
传统的解决思路:自定义一个拦截器,当有模糊查询时,模糊查询的关键字中包含有上述特殊字符时,在该特殊字符前添加\进行转义处理. 新的解决思路:将like 替换为 MySQL内置函数locate函数 参考 ...
- MyBatis动态SQL与模糊查询
sqlxml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC & ...
- mybatis中根据日期模糊查询
首先设置起始日期startDate和结束日期endDate,数据库中日期字段为achive_time,表名为dos_dossier<select id="getDossiers&quo ...
- mybatis 动态Sql的模糊查询
where teacher.tname like concat(concat(#{tName}),'%') 2:distinct的使用 下面先来看看例子: table id name 1 ...
- Mybatis中的like模糊查询四种方式
1. 参数中直接加入%% param.setUsername("%CD%"); param.setPassword("%11%"); <select i ...
- Mybatis中的like模糊查询
1. 参数中直接加入%% param.setUsername("%CD%"); param.setPassword("%11%"); <sel ...
随机推荐
- iOS音频播放 (五):AudioQueue
码农人生 ChengYin's coding life 主页 Blog 分类 Categories 归档 Archives 关于 About Weibo GitHub RSS Where there ...
- EF 拉姆达 linq if else (整理)
首先想到: var data0 = db.T_Plants2; //这里加.AsQueryable() ) { .Where(d => d.NaturalEcosystem == true); ...
- .net core jenkins持续集成
执行 Shell pwd ls echo ${PATH} whoami which dotnet dotnet --info dotnet --version echo '============== ...
- CI框架扩展系统类库
CI框架不支持像yii2框架那样,可以直接在controllers下创建CommonController并继承父类,那么我们想要做登录控制或权限控制时,直接在父类控制器操作是不合理的. 这时比较方便的 ...
- Github 上 36 个最实用的 Vue 开源库
任何一个开发者,都是十分喜欢使用开源软件包的.因为它使开发工作变得更快速.高效.容易.如果没有开源软件包,开发工作将变得疲惫不堪,不断的重复造轮子! 下面整理了 Github 上 36 个实用的 Vu ...
- 一个线上JVM的CPU资源占用过高问题的排查
原文:https://www.iteye.com/blog/tyrion-2293369 上午线上某应用的一台JVM的CPU占比突然飙高到192%,并且一直下不来,导致监控一直告警,好久没处理这种问题 ...
- ACAG 0x01-4 最短Hamilton路径
ACAG 0x01-4 最短Hamilton路径 论为什么书上标程跑不过这道题-- 首先,这道题与今年CSP-S2的D1T3有着异曲同工之妙,那就是--都有$O(n!)$的做法!(大雾) 这道题的正解 ...
- 使用python的jira库操作jira的版本单和问题单链接
操作JIRA的API来实现的. 但感觉比单纯操作API要简单一些. from jira import JIRA from django.conf import settings JIRA_URL = ...
- Linux centos通过安装lszrz用CRT实现与Windows互相传文件
本经验均在CentOSrelease6.7(Final)下操作,如知识有欠缺之处 欢迎批评指正: lrzsz是一个搭配SecureCRT使用的在linux和windows之间上传下载工具. 1 2 3 ...
- Go语言 - 函数 | 作用域 | 匿名函数 | 闭包 | 内置函数
函数是组织好的.可重复使用的.用于执行指定任务的代码块.本文介绍了Go语言中函数的相关内容. 介绍 Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于“一等公民”. 函数可以赋值给变量 函数 ...