MyBatis Generator Example.Criteria 查询条件复制
生活随笔
收集整理的這篇文章主要介紹了
MyBatis Generator Example.Criteria 查询条件复制
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
背景:
??? 我們?cè)陂_發(fā)中使用MyBatis Generator生成的 XxxExample查詢時(shí),咋添加 or 查詢時(shí)候,可能兩個(gè) Example.Criteria 對(duì)象的條件存在交集,即多個(gè)查詢條件是相同的。每個(gè)查詢條件的添加可能需要進(jìn)行多種邏輯判斷,這樣多個(gè) Example.Criteria 就要判斷多次,造成代碼的大量重復(fù)及效率的浪費(fèi)。
實(shí)現(xiàn):
??? 有沒有一種方法可以將 Example.Criteria A的查詢條件復(fù)制到 Example.Criteria B的方法呢,不多講了看下面代碼實(shí)現(xiàn)。
/*** 拷貝查詢條件工具* * @author ZQC* @version 1.0 2018-11-29* */ public class CriteriaTools {/*** 拷貝查詢條件;僅將原Criteria中的condition復(fù)制到目標(biāo)Criteria,不會(huì)覆蓋目標(biāo)Criteria已有condition* * @param source 原Criteria* @param target 目標(biāo)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添加兩個(gè)條件 UserExample.Criteria c2 = example.or();c2.andIdLike("1");// c2增加一個(gè)條件 CriteriaTools.copyCondition(c1, c2);// 拷貝條件 c1.andPasswordEqualTo("555").andPasswordIsNull();// c1添加兩個(gè)條件 System.out.println("c1 " + c1.getAllCriteria().size());System.out.println("c2:" + c2.getAllCriteria().size());}}?
總結(jié):
??? 這里主要使用了反射、泛型等技術(shù),沒有什么高深的技術(shù),但工具類確實(shí)能給開發(fā)人員帶來極大方便,及程序效率上的提升。
轉(zhuǎn)載于:https://www.cnblogs.com/a2b1/p/11255035.html
總結(jié)
以上是生活随笔為你收集整理的MyBatis Generator Example.Criteria 查询条件复制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tomcat的安装和配置及出错处理
- 下一篇: oracle 表空间-用户-授权-表创建