| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- 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 <T> QueryWrapper<T> convertQuery(Object obj, JSONObject... jsonObj) {
- JSONObject param = new JSONObject();
- if (ArrayUtils.isNotEmpty(jsonObj)) {
- param = jsonObj[0];
- }
- QueryWrapper<T> 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<String> 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) {
- }
- }
|