QueryWrapperUtil.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. package me.zhengjie.base.plus;
  2. import java.lang.reflect.Field;
  3. import java.util.Arrays;
  4. import java.util.List;
  5. import org.apache.commons.lang3.ArrayUtils;
  6. import org.springframework.core.annotation.AnnotationUtils;
  7. import org.springframework.util.ObjectUtils;
  8. import com.alibaba.fastjson.JSONObject;
  9. import com.baomidou.mybatisplus.annotation.TableField;
  10. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  11. /**
  12. * @Description 拼接查询条件工具类
  13. */
  14. public class QueryWrapperUtil {
  15. /**
  16. * 拼接查询条件
  17. *
  18. * @param obj 数据实体
  19. * @return void 返回参数说明
  20. * @exception/throws
  21. */
  22. public static <T> QueryWrapper<T> convertQuery(Object obj, JSONObject... jsonObj) {
  23. JSONObject param = new JSONObject();
  24. if (ArrayUtils.isNotEmpty(jsonObj)) {
  25. param = jsonObj[0];
  26. }
  27. QueryWrapper<T> queryWrapper = new QueryWrapper<>();
  28. Class<?> clazz = obj.getClass();
  29. try {
  30. // 反射遍历属性
  31. for (Field field : clazz.getDeclaredFields()) {
  32. // 获取属性名
  33. String fieldname = field.getName();
  34. // 抑制Java对修饰符的检查
  35. field.setAccessible(true);
  36. // 获取属性值
  37. Object fieldValue = field.get(obj);
  38. // String fieldValue = getFieldValue(obj ,field.getName()).toString();
  39. TableField tableField = AnnotationUtils.getAnnotation(field, TableField.class);
  40. // 字段没有TableField这个注解和有这个主机上false的
  41. if (ObjectUtils.isEmpty(tableField) || !tableField.exist()) {
  42. continue;
  43. }
  44. String fieldName = tableField.value();
  45. // 默认是相等
  46. QueryWapper queryWapperAnnotation = AnnotationUtils.getAnnotation(field, QueryWapper.class);
  47. if (ObjectUtils.isEmpty(queryWapperAnnotation)) {
  48. queryWrapper.eq(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue);
  49. } else {
  50. // 获取枚举
  51. QueryKeyword[] queryWapperEnums = queryWapperAnnotation.value();
  52. for (QueryKeyword queryWapperEnum : queryWapperEnums) {
  53. // 拼接查询条件
  54. switch (queryWapperEnum) {
  55. case NE:
  56. queryWrapper.ne(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue);
  57. break;
  58. // 这里需要,修改为集合
  59. case IN:
  60. if (fieldValue != null && fieldValue.toString().contains(",")) {
  61. List<String> result = Arrays.asList(fieldValue.toString().split(","));
  62. queryWrapper.in(!ObjectUtils.isEmpty(fieldValue), fieldName, result);
  63. }
  64. break;
  65. case GT:
  66. queryWrapper.gt(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue);
  67. break;
  68. case GE:
  69. queryWrapper.ge(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue);
  70. break;
  71. case LT:
  72. queryWrapper.lt(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue);
  73. break;
  74. case LE:
  75. queryWrapper.le(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue);
  76. break;
  77. case LIKE:
  78. queryWrapper.like(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue);
  79. break;
  80. case NOT_LIKE:
  81. queryWrapper.notLike(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue);
  82. break;
  83. case LIKE_LEFT:
  84. queryWrapper.likeLeft(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue);
  85. break;
  86. case LIKE_RIGHT:
  87. queryWrapper.likeRight(!ObjectUtils.isEmpty(fieldValue), fieldName, fieldValue);
  88. break;
  89. case DESC:
  90. queryWrapper.orderByDesc(fieldName);
  91. break;
  92. case ASC:
  93. queryWrapper.orderByAsc(fieldName);
  94. break;
  95. case RANGE:
  96. // obj.getClass().su
  97. // 设置开始的值和结束的值
  98. String[] attribute = queryWapperAnnotation.attribute();
  99. // 得到开始的属性值,通过反射设置属性值
  100. Field startRange = clazz.getDeclaredField(attribute[0]);
  101. startRange.setAccessible(true);
  102. Object val = startRange.get(obj);
  103. if (!ObjectUtils.isEmpty(val)) {
  104. queryWrapper.ge(fieldName, val);
  105. }
  106. // 然后通过参数查询
  107. val = param.get(attribute[0]);
  108. if (!ObjectUtils.isEmpty(val)) {
  109. queryWrapper.ge(fieldName, val);
  110. }
  111. // 结束的属性值,通过反射设置属性值
  112. Field endRange = clazz.getDeclaredField(attribute[1]);
  113. endRange.setAccessible(true);
  114. val = endRange.get(obj);
  115. if (!ObjectUtils.isEmpty(val)) {
  116. queryWrapper.le(fieldName, val);
  117. }
  118. // 然后通过参数查询
  119. val = param.get(attribute[1]);
  120. if (!ObjectUtils.isEmpty(val)) {
  121. queryWrapper.le(fieldName, val);
  122. }
  123. break;
  124. default:
  125. break;
  126. }
  127. }
  128. }
  129. }
  130. } catch (Exception e) {
  131. e.printStackTrace();
  132. }
  133. return queryWrapper;
  134. }
  135. /**
  136. * 获取属性名
  137. *
  138. * @exception/throws
  139. */
  140. // private static String getFieldValue(Object owner, String fieldName) {
  141. // try {
  142. // return invokeMethod(owner, fieldName, null).toString();
  143. // } catch (Exception e) {
  144. // e.printStackTrace();
  145. // }
  146. // return null;
  147. // }
  148. public static void main(String[] args) {
  149. }
  150. }