MyBatis Generator Example.Criteria 查询条件复制
程序员文章站
2022-08-22 09:16:25
MyBatis Generator Example.Criteria 查询条件复制 ......
背景:
我们在开发中使用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()); } }
总结:
这里主要使用了反射、泛型等技术,没有什么高深的技术,但工具类确实能给开发人员带来极大方便,及程序效率上的提升。
推荐阅读
-
在mybatis和PostgreSQL Json字段作为查询条件的解决方案
-
MyBatis Generator Example.Criteria 查询条件复制
-
mybatis generator 的复合查询
-
mybatis collection 多条件查询的实现方法
-
mybatis-plus QueryWrapper自定义查询条件的实现
-
利用MyBatis实现条件查询的方法汇总
-
mybatis in 查询使用String做条件
-
mybatis的mapper特殊字符转移及动态SQL条件查询小结
-
Mybatis 不确定条件查询(动态语句where和if)借助实体类封装参数
-
mybatis中的count()按条件查询方式