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());

    }

}

 

總結:

    這里主要使用了反射、泛型等技術,沒有什么高深的技術,但工具類確實能給開發人員帶來極大方便,及程序效率上的提升。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM