package me.zhengjie.base.plus; import java.lang.reflect.Field; import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.ArrayUtils; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.util.ObjectUtils; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; /** * @Description 拼接查询条件工具类 */ public class QueryWrapperUtil { /** * 拼接查询条件 * * @param obj 数据实体 * @return void 返回参数说明 * @exception/throws */ public static QueryWrapper convertQuery(Object obj, JSONObject... jsonObj) { JSONObject param = new JSONObject(); if (ArrayUtils.isNotEmpty(jsonObj)) { param = jsonObj[0]; } QueryWrapper queryWrapper = new QueryWrapper<>(); Class clazz = obj.getClass(); try { // 反射遍历属性 for (Field field : clazz.getDeclaredFields()) { // 获取属性名 String fieldname = field.getName(); // 抑制Java对修饰符的检查 field.setAccessible(true); // 获取属性值 Object fieldValue = field.get(obj); // String fieldValue = getFieldValue(obj ,field.getName()).toString(); TableField tableField = AnnotationUtils.getAnnotation(field, TableField.class); // 字段没有TableField这个注解和有这个主机上false的 if (ObjectUtils.isEmpty(tableField) || !tableField.exist()) { continue; } String fieldName = tableField.value(); // 默认是相等 QueryWapper queryWapperAnnotation = AnnotationUtils.getAnnotation(field, QueryWapper.class); if (ObjectUtils.isEmpty(queryWapperAnnotation)) { queryWrapper.eq(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue); } else { // 获取枚举 QueryKeyword[] queryWapperEnums = queryWapperAnnotation.value(); for (QueryKeyword queryWapperEnum : queryWapperEnums) { // 拼接查询条件 switch (queryWapperEnum) { case NE: queryWrapper.ne(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue); break; // 这里需要,修改为集合 case IN: if (fieldValue != null && fieldValue.toString().contains(",")) { List result = Arrays.asList(fieldValue.toString().split(",")); queryWrapper.in(!ObjectUtils.isEmpty(fieldValue), fieldName, result); } break; case GT: queryWrapper.gt(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue); break; case GE: queryWrapper.ge(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue); break; case LT: queryWrapper.lt(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue); break; case LE: queryWrapper.le(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue); break; case LIKE: queryWrapper.like(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue); break; case NOT_LIKE: queryWrapper.notLike(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue); break; case LIKE_LEFT: queryWrapper.likeLeft(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue); break; case LIKE_RIGHT: queryWrapper.likeRight(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue); break; case DESC: queryWrapper.orderByDesc(fieldName); break; case ASC: queryWrapper.orderByAsc(fieldName); break; case RANGE: // obj.getClass().su // 设置开始的值和结束的值 String[] attribute = queryWapperAnnotation.attribute(); // 得到开始的属性值,通过反射设置属性值 Field startRange = clazz.getDeclaredField(attribute[0]); startRange.setAccessible(true); Object val = startRange.get(obj); if (!ObjectUtils.isEmpty(val)) { queryWrapper.ge(fieldName, val); } // 然后通过参数查询 val = param.get(attribute[0]); if (!ObjectUtils.isEmpty(val)) { queryWrapper.ge(fieldName, val); } // 结束的属性值,通过反射设置属性值 Field endRange = clazz.getDeclaredField(attribute[1]); endRange.setAccessible(true); val = endRange.get(obj); if (!ObjectUtils.isEmpty(val)) { queryWrapper.le(fieldName, val); } // 然后通过参数查询 val = param.get(attribute[1]); if (!ObjectUtils.isEmpty(val)) { queryWrapper.le(fieldName, val); } break; default: break; } } } } } catch (Exception e) { e.printStackTrace(); } return queryWrapper; } /** * 获取属性名 * * @exception/throws */ // private static String getFieldValue(Object owner, String fieldName) { // try { // return invokeMethod(owner, fieldName, null).toString(); // } catch (Exception e) { // e.printStackTrace(); // } // return null; // } public static void main(String[] args) { } }