这几天刚接触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类使用及解析相关推荐

  1. mybatis是什么_深入解析:Mybatis接口没有实现类为什么可以执行增删改查?

    作者:小傅哥 链接:https://segmentfault.com/a/1190000022767561 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言介绍 MyBatis 是一款非常优秀的 ...

  2. mybatis实体类注解_SpringBoot2.x系列教程43--整合使用Mybatis

    SpringBoot2.x系列教程43--整合使用Mybatis 作者:一一哥 在上一节中,我带大家学习了Spring Boot中整合JPA,那接下来这一章节中,我继续带领大家学习如何在Spring ...

  3. Mybatis JPA-集成方案+代码解析

    为什么80%的码农都做不了架构师?>>>    源码地址(git):https://github.com/LittleNewbie/mybatis-jpa 一.Mybatis简介 m ...

  4. mybatis java类注解式_mybatis注解详解

    http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html mybatis的原身是ibatis,现在已经脱离了apache基金会,新官网是http://ww ...

  5. Mybatis源码:@MapperScan解析过程

    目录 0.说明 1.@MapperScan 2. MapperScannerRegister 3.ClassPathMapperScanner 4. MapperFactoryBean 0.说明 my ...

  6. MyBatis 源码分析 - 配置文件解析过程

    文章目录 * 本文速览 1.简介 2.配置文件解析过程分析 2.1 配置文件解析入口 2.2 解析 properties 配置 2.3 解析 settings 配置 2.3.1 settings 节点 ...

  7. Mybatis 缓存系统源码解析

    Mybatis 缓存系统源码解析 转载于:https://juejin.im/post/5bfa50905188251d0920006c

  8. yolo类检测算法解析——yolo v3

    原文:https://www.cnblogs.com/cvtoEyes/p/8608205.html yolo类检测算法解析--yolo v3 计算机视觉的发展史可谓很长了,它的分支很多,而且理论那是 ...

  9. mybatis对mapper.xml的解析(三)

    mybatis中对语句的解析使用了组合模式,针对不同的sql结点处理抽象出了SqlNode.详细的设计图为 什么时候创建不同的SqlSource? 创建DynamicSqlSource情况: 在包含有 ...

最新文章

  1. Linux系统中运行.sh文件的几种方法
  2. fibonacci 数列及其应用
  3. ACM提交,C++,G++,C,GCC的区别
  4. 管理active directiory中的用户和计算机管理磁盘,IP多播桌面视频会议系统媒体流管理与安全机制的分析.pdf...
  5. thinkphp的使用——隐藏index.php
  6. Ehcache BigMemory: 摆脱GC困扰(转)
  7. javascript实现汉诺塔动画效果
  8. http长/短轮询和WebSocket 的介绍和比较
  9. 图灵奖大佬+谷歌团队,为通用人工智能背书!CV 任务也能用 LM 建模!
  10. python按行读取文件取消空白行_python去掉空白行的多种实现代码
  11. tp获取referer里的域名_thinkPHP的redirect跳转和referer使用的问题
  12. 宝塔无法安装php5,宝塔无法安装phpmyadmin怎么办
  13. linux一次执行多个命令,linux 一次执行多条命令
  14. 机器视觉的典型应用及领域分析
  15. 关于EXP-00056: 遇到 ORACLE 错误 1455 ORA-01455: 转换列溢出整数数据类型 EXP-00000: 导出终止失败 的问题解决方法整理
  16. C语言中指针定义的字符串和数组定义的字符串的区别
  17. C语言PAT乙级试题答案1016
  18. foxmail邮件服务器端口,Foxmail IMAP设置
  19. 通过写《费用明细表》发现写sql的乐趣
  20. 微商卖货怎么引流?微商怎么找客源?

热门文章

  1. 阿里云个人实名认证教程
  2. 1096: 水仙花数(函数专题)C语言
  3. 关于Java特种兵下册
  4. matlab调用摄像头函数,Matlab调用系统摄像头
  5. Ubuntu系统如何连ZJU内网
  6. 在手机上体验Windows系统?一个网站就够了
  7. java实战开发小工具-------搜题软件,导出jar包变成exe软件!可运行没有安装java jdk电脑中 快速用来巩javase知识
  8. 爬取蝉妈妈数据平台商品数据
  9. Unity Android手机触屏事件
  10. app开发完成后,不能上架苹果商店(App Store)怎么办呢?