zoukankan      html  css  js  c++  java
  • 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());
    
        }
    
    }

    总结:

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

  • 相关阅读:
    圆形刻度盘 进度 展示
    弧度、角度换算公式
    placeholder 颜色更改
    移除HTML5 input在type="number"时的上下小箭头
    linux 安装python-setuptools
    通过helm 安装 harbor 不成功问题处理
    k8s 添加ingress 暴露服务
    k8s编辑pod配置信息
    postgres 数据导入导出
    万能视频后台转码
  • 原文地址:https://www.cnblogs.com/a2b1/p/11255035.html
Copyright © 2011-2022 走看看