功能實現:
使用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; } }
2. 通過反射獲得成員變量的值類實現:
3. 將駝峰命名字段轉換為數據庫db字段類實現: