MyBatis Generator Example.Criteria 查询条件复制 - ZQC - 博客园

背景:

    我们在开发中使用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());

}

}

复制代码; "复制代码")

总结:

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


原网址: 访问
创建于: 2020-11-20 15:34:11
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论