關於MybatisPlus 構造器類封裝


 

功能實現:

使用mybatisPlus 根據傳入對象(查詢條件)根據在對象中加入的注解查詢條件 完成對傳入對象的查詢  

主要使用方法:

1. mybatisPlus 構造器的使用 2. java反射機制的使用 3.java注解的實現

流程圖展示:

 

1. 構造器實現的主要類:

  

package com.pig4cloud.pigx.common.data.util;

import cn.hutool.core.util.ReflectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.pig4cloud.pigx.common.data.annotation.DynamicQuery;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class CreateQuery {

    public static QueryWrapper getQueryWrapper(Object queryObj) {

        int len;
        String fieldName2;
        String first;
        Object endValue;
        Method endMethod;

        Class<?> clazz = queryObj.getClass(); //得到查詢類的類
        Field[] fields = clazz.getDeclaredFields();//獲取類成員變量
        QueryWrapper queryWrapper = new QueryWrapper();
        for (Field field : fields) {//遍歷所有的類成員變量

            DynamicQuery query = field.getAnnotation(DynamicQuery.class); //得到成員變量上的注解
            if (query == null)
                continue;

            Object queryValue = ReflectUtil.getFieldValue(queryObj, field); // 得到注解類的值

            if (queryValue != null) {
                String dbField = query.dbField();
                if (dbField.equals("")) {
                    dbField = CamelUtil.underscoreName(field.getName()); //將駝峰命名法命名為數據庫命名法
                }
                switch (query.value()) { //
                    case eq:
                        queryWrapper.eq(dbField, queryValue);
                        break;
                    case ne:
                        queryWrapper.ne(dbField, queryValue);
                        break;
                    case gt:
                        queryWrapper.gt(dbField, queryValue);
                        break;
                    case ge:
                        queryWrapper.ge(dbField, queryValue);
                        break;
                    case lt:
                        queryWrapper.lt(dbField, queryValue);
                        break;
                    case le:
                        queryWrapper.le(dbField, queryValue);
                        break;
                    case like:
                        queryWrapper.like(dbField, queryValue);
                        break;
                    case notLike:
                        queryWrapper.notLike(dbField, queryValue);
                        break;
                    case between:
                        len = field.getName().length();
                        fieldName2 = field.getName().substring(0, len - 2);
                        first = fieldName2.substring(0, 1);
                        fieldName2 = fieldName2.substring(1, len - 2);
                        fieldName2 = first.toUpperCase() + fieldName2 + "End";
                        endMethod = ReflectUtil.getMethod(queryObj.getClass(), fieldName2);
                        try {
                            endValue = endMethod.invoke(queryObj);
                        } catch (Exception e) {
                            e.printStackTrace();
                            continue;
                        }
                        if (endValue != null)
                            queryWrapper.between(dbField, queryValue, endValue);
                        break;

                    case notBetween:
                        len = field.getName().length();
                        fieldName2 = field.getName().substring(0, len - 2);
                        first = fieldName2.substring(0, 1);
                        fieldName2 = fieldName2.substring(1, len - 2);
                        fieldName2 = first.toUpperCase() + fieldName2 + "End";

                        endMethod = ReflectUtil.getMethod(queryObj.getClass(), fieldName2);
                        try {
                            endValue = endMethod.invoke(queryObj);
                        } catch (Exception e) {
                            e.printStackTrace();
                            continue;
                        }
                        if (endValue != null)
                            queryWrapper.notBetween(dbField, queryValue, endValue);
                        break;
                    case likeLeft:
                        queryWrapper.likeLeft(dbField, queryValue);
                        break;
                    case likeRight:
                        queryWrapper.likeRight(dbField, queryValue);
                        break;
                    case isNull:
                        queryWrapper.isNull(dbField);
                        break;
                    case inNotNull:
                        queryWrapper.isNotNull(dbField);
                        break;
                    case in:
                        queryWrapper.in(dbField, queryValue);
                        break;
                    case notIn:
                        queryWrapper.notIn(dbField, queryValue);
                        break;
                    default:
                        break;
                }
            }
        }
        return queryWrapper;
    }
}
View Code

 

2. 通過反射獲得成員變量的值類實現:

 

3. 將駝峰命名字段轉換為數據庫db字段類實現:


免責聲明!

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



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