Mybatis Example类使用及解析
这几天刚接触example,见下面两篇文章总结的不错,转载到此处分享下,供需要的各位参考。
一、example类
mybatis-generator会为每个字段产生如上的Criterion,如果表的字段比较多,产生的Example类会十分庞大。理论上通过example类可以构造你想到的任何筛选条件。在mybatis-generator中加以配置,配置数据表的生成操作就可以自动生成example了。具体配置可以参考Mybatis-Generator的具体使用:https://www.cnblogs.com/zorro-y/p/5602471.html有关配置。
下面是mybatis自动生成example的使用。
二、了解example成员变量
//升序还是降序
//参数格式:字段+空格+asc(desc)
protected String orderByClause;
//去除重复
//true是选择不重复记录
protected boolean distinct;
//自定义查询条件
//Criteria的集合,集合中对象是由or连接
protected List<Criteria> oredCriteria;
//内部类Criteria包含一个Cretiron的集合,
//每一个Criteria对象内包含的Cretiron之间
//是由AND连接的
public static class Criteria extends GeneratedCriteria {
protected Criteria() {
super();
}
}
//是mybatis中逆向工程中的代码模型
protected abstract static class GeneratedCriteria
{…..}
//是最基本,最底层的Where条件,用于字段级的筛选
public static class Criterion {……}
三、example使用前的准备
比如我的example是根据user表生成的,UserMapper属于dao层,UserMapper.xml是对应的映射文件
UserMapper接口:
long countByExample(CompetingStoreExample example);
List<CompetingStore> selectByExample(CompetingStoreExample example);
在我们的测试类里:
UserExample example = new UserExample();
UserExample.Criteria criteria = example.createCriteria();
四、查询用户数量
long count = UserMapper.countByExample(example);
类似于:select count(*) from user
五、where条件查询或多条件查询
example.setOrderByClause("age asc");//升序
example.setDistinct(false);//不去重
if(!StringUtils.isNotBlank(user.getName())){
Criteria.andNameEqualTo(user.getName());
}
if(!StringUtils.isNotBlank(user.getSex())){
Criteria.andSexEqualTo(user.getSex());
}
List<User> userList=userMapper.selectByExample(example);
类似于:select * from user where name={#user.name} and sex={#user.sex} order by age asc;
UserExample.Criteria criteria1 = example.createCriteria();
UserExample.Criteria criteria2 = example.createCriteria();
if(!StringUtils.isNotBlank(user.getName())){
Criteria1.andNameEqualTo(user.getName());
}
if(!StringUtils.isNotBlank(user.getSex())){
Criteria2.andSexEqualTo(user.getSex());
}
Example.or(criteria2);
List<User> userList=userMapper.selectByExample(example);
类似于:select * from user where name={#user.name} or sex={#user.sex} ;
六、模糊查询
if(!StringUtils.isNotBlank(user.getName())){
criteria.andNameLIke(‘%’+name+’%’);
}
List<User> userList=userMapper.selectByExample(example);
类似于:select * from user where name like %{#user.name}%
七、分页查询
int start = (currentPage - 1) * rows;
//分页查询中的一页数量
example.setPageSize(rows);
//开始查询的位置
example.setStartRow(start);
List<User> userList=userMapper.selectByExample(example);
类似于:select * from user limit start to rows
上述原文链接:https://blog.csdn.net/luluyo/article/details/81708833
下述原文链接:由于转载下文的作者没有注明原文链接,所以本文暂无法注明。
1.先看一个例子,我们想这样表达:
查询条件1:a=? and (b=? or c=?) 不支持查询条件2:(a=? And b=?) or (a=? And c=?) 支持
如果我们要得到1的效果,就要改写为2的形式:
Example example=new Example();
Example.Criteria criteria1=example.createCriteria();
criteria1.andAEqualTo(1).andBEqualTo(2); Example.Criteria criteria2=example.createCriteria();
criteria2.andAEqualTo(1).andCEqualTo(3);
example.or(criteria2); //生成的sql语句
select count(*) from demo WHERE ( a = 1 and b = 2 ) or ( a = 1 and c = 3 )
2.在看一个示例
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);
- or()方法会产生一个新的Criteria对象,添加到oredCriteria中,并返回这个Criteria对象,从而可以链式表达,为其添加Criterion。
- Example类的distinct字段用于指定DISTINCT查询。
- orderByClause字段用于指定ORDER BY条件,这个条件没有构造方法,直接通过传递字符串值指定。
产生的SQL语句如下:
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)
一、mapper接口中的方法解析*
mapper接口中的部分常用方法及功能如下:
方法 | 功能说明 |
---|---|
int countByExample(UserExample example) thorws SQLException | 按条件计数 |
int deleteByPrimaryKey(Integer id) thorws SQLException | 按主键删除 |
int deleteByExample(UserExample example) thorws SQLException | 按条件删除 |
String/Integer insert(User record) thorws SQLException | 插入数据(返回值为ID) |
User selectByPrimaryKey(Integer id) thorws SQLException | 按主键查询 |
ListselectByExample(UserExample example) thorws SQLException | 按条件查询 |
ListselectByExampleWithBLOGs(UserExample example) thorws SQLException | 按条件查询(包括BLOB字段)。只有当数据表中的字段类型有为二进制的才会产生 |
int updateByPrimaryKey(User record) thorws SQLException | 按主键更新 |
int updateByPrimaryKeySelective(User record) thorws SQLException | 按主键更新值不为null的字段 |
int updateByExample(User record, UserExample example) thorws SQLException | 按条件更新 |
int updateByExampleSelective(User record, UserExample example) thorws SQLException | 按条件更新值不为null的字段 |
二、Example类解析
mybatis的逆向工程中会生成实体类及实体类对应的example类,example类用于添加条件,相当where后面的部分。
xxxExample example = new xxxExample();
Criteria criteria = example.createCriteria();
example类中的部分常用方法及功能如下:
方法 | 功能说明 |
---|---|
example.setOrderByClause(“字段名 ASC”); | 添加升序排列条件,DESC为降序 |
example.setDistinct(false) | 去除重复,boolean型,true为选择不重复的记录 |
criteria.andXxxIsNull | 添加字段xxx为null的条件 |
criteria.andXxxIsNotNull | 添加字段xxx不为null的条件 |
criteria.andXxxEqualTo(value) | 添加xxx字段等于value条件 |
criteria.andXxxNotEqualTo(value) | 添加xxx字段不等于value条件 |
criteria.andXxxGreaterThan(value) | 添加xxx字段大于value条件 |
criteria.andXxxGreaterThanOrEqualTo(value) | 添加xxx字段大于等于value条件 |
criteria.andXxxLessThan(value) | 添加xxx字段小于value条件 |
criteria.andXxxLessThanOrEqualTo(value) | 添加xxx字段小于等于value条件 |
criteria.andXxxIn(List<?>) | 添加xxx字段值在List<?>条件 |
criteria.andXxxNotIn(List<?>) | 添加xxx字段值不在List<?>条件 |
criteria.andXxxLike(“%”+value+”%”) | 添加xxx字段值为value的模糊查询条件 |
criteria.andXxxNotLike(“%”+value+”%”) | 添加xxx字段值不为value的模糊查询条件 |
criteria.andXxxBetween(value1,value2) | 添加xxx字段值在value1和value2之间条件 |
criteria.andXxxNotBetween(value1,value2) | 添加xxx字段值不在value1和value2之间条件 |
注:在mybatis逆向工程生成的文件XxxExample.java中包含一个static的内部类Criteria,Criteria中的方法是定义SQL 语句where后的查询条件。
Mybatis Example类使用及解析相关推荐
- mybatis是什么_深入解析:Mybatis接口没有实现类为什么可以执行增删改查?
作者:小傅哥 链接:https://segmentfault.com/a/1190000022767561 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言介绍 MyBatis 是一款非常优秀的 ...
- mybatis实体类注解_SpringBoot2.x系列教程43--整合使用Mybatis
SpringBoot2.x系列教程43--整合使用Mybatis 作者:一一哥 在上一节中,我带大家学习了Spring Boot中整合JPA,那接下来这一章节中,我继续带领大家学习如何在Spring ...
- Mybatis JPA-集成方案+代码解析
为什么80%的码农都做不了架构师?>>> 源码地址(git):https://github.com/LittleNewbie/mybatis-jpa 一.Mybatis简介 m ...
- mybatis java类注解式_mybatis注解详解
http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html mybatis的原身是ibatis,现在已经脱离了apache基金会,新官网是http://ww ...
- Mybatis源码:@MapperScan解析过程
目录 0.说明 1.@MapperScan 2. MapperScannerRegister 3.ClassPathMapperScanner 4. MapperFactoryBean 0.说明 my ...
- MyBatis 源码分析 - 配置文件解析过程
文章目录 * 本文速览 1.简介 2.配置文件解析过程分析 2.1 配置文件解析入口 2.2 解析 properties 配置 2.3 解析 settings 配置 2.3.1 settings 节点 ...
- Mybatis 缓存系统源码解析
Mybatis 缓存系统源码解析 转载于:https://juejin.im/post/5bfa50905188251d0920006c
- yolo类检测算法解析——yolo v3
原文:https://www.cnblogs.com/cvtoEyes/p/8608205.html yolo类检测算法解析--yolo v3 计算机视觉的发展史可谓很长了,它的分支很多,而且理论那是 ...
- mybatis对mapper.xml的解析(三)
mybatis中对语句的解析使用了组合模式,针对不同的sql结点处理抽象出了SqlNode.详细的设计图为 什么时候创建不同的SqlSource? 创建DynamicSqlSource情况: 在包含有 ...
最新文章
- Linux系统中运行.sh文件的几种方法
- fibonacci 数列及其应用
- ACM提交,C++,G++,C,GCC的区别
- 管理active directiory中的用户和计算机管理磁盘,IP多播桌面视频会议系统媒体流管理与安全机制的分析.pdf...
- thinkphp的使用——隐藏index.php
- Ehcache BigMemory: 摆脱GC困扰(转)
- javascript实现汉诺塔动画效果
- http长/短轮询和WebSocket 的介绍和比较
- 图灵奖大佬+谷歌团队,为通用人工智能背书!CV 任务也能用 LM 建模!
- python按行读取文件取消空白行_python去掉空白行的多种实现代码
- tp获取referer里的域名_thinkPHP的redirect跳转和referer使用的问题
- 宝塔无法安装php5,宝塔无法安装phpmyadmin怎么办
- linux一次执行多个命令,linux 一次执行多条命令
- 机器视觉的典型应用及领域分析
- 关于EXP-00056: 遇到 ORACLE 错误 1455 ORA-01455: 转换列溢出整数数据类型 EXP-00000: 导出终止失败 的问题解决方法整理
- C语言中指针定义的字符串和数组定义的字符串的区别
- C语言PAT乙级试题答案1016
- foxmail邮件服务器端口,Foxmail IMAP设置
- 通过写《费用明细表》发现写sql的乐趣
- 微商卖货怎么引流?微商怎么找客源?