背景:

我们在开发中使用MyBatis Generator生成的 XxxExample查询时,咋添加 or 查询时候,可能两个 Example.Criteria 对象的条件存在交集,即多个查询条件是相同的。每个查询条件的添加可能需要进行多种逻辑判断,这样多个 Example.Criteria 就要判断多次,造成代码的大量重复及效率的浪费。

实现:

有没有一种方法可以将 Example.Criteria A的查询条件复制到 Example.Criteria B的方法呢,不多讲了看下面代码实现。

/*** 拷贝查询条件工具* * @author ZQC* @version 1.0 2018-11-29* */
public class CriteriaTools
{/*** 拷贝查询条件;仅将原Criteria中的condition复制到目标Criteria,不会覆盖目标Criteria已有condition* * @param source 原Criteria* @param target 目标Criteria*/@SuppressWarnings({ "unchecked", "rawtypes" })public static <T> void copyCondition(T source, T target){if (null != source && null != target){try{Field field = source.getClass().getSuperclass().getDeclaredField("criteria");field.setAccessible(true);List sourceCriteria = (List) field.get(source);List targetCriteria = (List) field.get(target);targetCriteria.addAll(sourceCriteria);} catch (Exception e){e.printStackTrace();}}}// 使用方法public static void main(String[] args){UserExample example = new UserExample();UserExample.Criteria c1 = example.createCriteria();c1.andIdEqualTo("abc").andUsernameEqualTo("123");// c1添加两个条件
UserExample.Criteria c2 = example.or();c2.andIdLike("1");// c2增加一个条件
CriteriaTools.copyCondition(c1, c2);// 拷贝条件
c1.andPasswordEqualTo("555").andPasswordIsNull();// c1添加两个条件
System.out.println("c1 " + c1.getAllCriteria().size());System.out.println("c2:" + c2.getAllCriteria().size());}}

总结:

这里主要使用了反射、泛型等技术,没有什么高深的技术,但工具类确实能给开发人员带来极大方便,及程序效率上的提升。

转载于:https://www.cnblogs.com/a2b1/p/11255035.html

MyBatis Generator Example.Criteria 查询条件复制相关推荐

  1. 【Java Web开发指南】mybatis的Example[Criteria]的使用

    Criteria英文是标准.条件和准则的意思 **在使用常规的mybatis时,我们经常碰到的问题就是条件式查询.在一个查询界面,查询条件较多,并且运算符并不总是=时,在后台就需要拼装sql语句.** ...

  2. mybatis中关于example类详解mybatis的Example[Criteria]的使用

    一.什么是example类 mybatis-generator会为每个字段产生如上的Criterion,如果表的字段比较多,产生的Example类会十分庞大.理论上通过example类可以构造你想到的 ...

  3. tk.mybatis - 使用 Example 类进行条件查询

    通用 Example 一.查询 1.selectOneByExample示例如下: Example example = new Example(OrderRemark.class); example. ...

  4. hibernate Criteria(条件查询接口)

    Criteria(条件查询接口) // 1.简单查询 List<Customer> list = session.createCriteria(Customer.class).list() ...

  5. MyBatis - MyBatis Generator 生成的example 如何使用 and or 简单混合查询

    简单介绍: Criteria,包含一个Cretiron的集合,每一个Criteria对象内包含的Cretiron之间是由AND连接的,是逻辑与的关系. oredCriteria,Example内有一个 ...

  6. Mybatis generator(复制粘贴完成)

    命令行模式 1.java -jar mybatis-generator-core-x.x.x.jar -configfile generatorConfig.xml 2.Maven plugin(my ...

  7. 【mybatis】mybatis自定义动态字段查询,mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段...

    mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段 先看一下 怎么实现动态的自定义字段查询: 例如: 而field 就是数据表中的某一个字段 String f ...

  8. hibernate的查询条件lt_鱼与熊掌得兼:Hibernate与Mybatis共存

    架构师(JiaGouX)我们都是架构师! 架构未来,你来不来? 很长一段时间,网上有很多关于Hibernate与Mybatis孰优孰劣的争论,两个阵营的人谁也不能说服谁,每个人的理由都很有道理.今天, ...

  9. hibernate的查询条件lt_hibernate的多条件查询——Criteria Query的应用

    查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中.此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询条 ...

最新文章

  1. java冻结行列,poi冻结行和列 - osc_0k23td2u的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. c 怎么连接mysql博客_C连接MySql数据库
  3. markdown绘图插件----mermaid简介
  4. BZOJ2190 SDOI2008 仪仗队
  5. Tiktok培训可以去学习吗?
  6. Spring的bean管理(注解注入属性)
  7. 基于javaweb+mysql数据库实现的宠物领养|流浪猫狗网站项目源代码
  8. python中的写入文件
  9. Word2010怎么绘制斜线表头
  10. 图像取证:源识别和伪造检测(Image Forensics: source identification and tampering detection)
  11. NS-miracle安装
  12. jira图片_JIRA issue 中的标记语言(Textile)
  13. AliOS-Things--EMW3060使用笔记--GPIO
  14. js 根据身份证获取出生日期与年龄
  15. 王姨劝我学HarmonyOS鸿蒙2.0系列教程之二应用知识梳理逻辑!
  16. Arrays.asList 转换数组成list集合失败的原因
  17. 《近匠》从Cubieboard到radxa:汤亮的第二次硬件创业
  18. C++作业 设计一个程序实现油桶面积与体积的计算(构造函数与析构函数)
  19. VUE探索第二篇-手脚架(vue-cli)
  20. 递推 SDUT 鬼吹灯之龙岭迷窟

热门文章

  1. Linux系统中文件^M乱码解决
  2. MySQL中索引的分类和基本操作
  3. 【原创】Quartz代码详解
  4. android中控制ListView宽度和高度
  5. SQL server 2012 如何取上个月的最后一天
  6. ZOJ 1970 All in All
  7. S1 Python 基础
  8. kubernetes(k8s)使用声明式管理与 创建yaml模板文件
  9. 天津理工大学 计算机网络综合实验,天津理工大学计算机网络 实验二
  10. 移动端 c++ 开发_这 10 点值得移动端开发重点学习