diff --git a/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/charles7c/continew/starter/data/mybatis/plus/query/Query.java b/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/charles7c/continew/starter/data/mybatis/plus/query/Query.java
index aa4947df..7b6ec2f2 100644
--- a/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/charles7c/continew/starter/data/mybatis/plus/query/Query.java
+++ b/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/charles7c/continew/starter/data/mybatis/plus/query/Query.java
@@ -21,8 +21,9 @@ import java.lang.annotation.*;
/**
* 查询注解
*
- * @author Zheng Jie(ELADMIN)
* @author Charles7c
+ * @author Jasmine
+ * @author Zheng Jie(ELADMIN)
* @since 1.0.0
*/
@Target(ElementType.FIELD)
@@ -31,15 +32,17 @@ import java.lang.annotation.*;
public @interface Query {
/**
- * 属性名数组
- * columns为空 走实体类的字段,并且根据queryType来查询;
- * columns不为空且columns长度为1,走columns[0]的字段,并且根据queryType来查询;
- * columns不为空且columns长度大于1,走columns的所有字段, 并且根据queryType来查询; columns之间的处理是OR操作。
+ * 列名
+ *
+ *
+ * columns 为空时,默认取值字段名(自动转换为下划线命名);
+ * columns 不为空且 columns 长度大于 1,多个列查询条件之间为或关系(OR)。
+ *
*/
String[] columns() default {};
/**
* 查询类型(等值查询、模糊查询、范围查询等)
*/
- QueryType type() default QueryType.EQUAL;
+ QueryType type() default QueryType.EQ;
}
diff --git a/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/charles7c/continew/starter/data/mybatis/plus/query/QueryHelper.java b/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/charles7c/continew/starter/data/mybatis/plus/query/QueryHelper.java
index 3234042e..f87f667a 100644
--- a/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/charles7c/continew/starter/data/mybatis/plus/query/QueryHelper.java
+++ b/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/charles7c/continew/starter/data/mybatis/plus/query/QueryHelper.java
@@ -16,10 +16,10 @@
package top.charles7c.continew.starter.data.mybatis.plus.query;
+import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -30,13 +30,13 @@ import top.charles7c.continew.starter.core.util.validate.ValidationUtils;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
-import java.util.Objects;
/**
* 查询助手
*
- * @author Zheng Jie(ELADMIN)
* @author Charles7c
+ * @author Jasmine
+ * @author Zheng Jie(ELADMIN)
* @since 1.0.0
*/
@Slf4j
@@ -44,12 +44,12 @@ import java.util.Objects;
public class QueryHelper {
/**
- * 根据查询条件构建 MyBatis Plus 查询条件封装对象
+ * 根据查询条件构建查询条件封装对象
*
* @param query 查询条件
* @param 查询条件数据类型
* @param 查询数据类型
- * @return MyBatis Plus 查询条件封装对象
+ * @return 查询条件封装对象
*/
public static QueryWrapper build(Q query) {
QueryWrapper queryWrapper = new QueryWrapper<>();
@@ -57,87 +57,80 @@ public class QueryHelper {
if (null == query) {
return queryWrapper;
}
- // 获取查询条件中所有的字段
+ // 解析并拼接查询条件
List fieldList = ReflectUtils.getNonStaticFields(query.getClass());
- fieldList.forEach(field -> buildQuery(query, field, queryWrapper));
+ fieldList.forEach(field -> buildWrapper(query, field, queryWrapper));
return queryWrapper;
}
/**
- * 构建 MyBatis Plus 查询条件封装对象
+ * 构建查询条件封装对象
*
* @param query 查询条件
* @param field 字段
- * @param queryWrapper MyBatis Plus 查询条件封装对象
+ * @param queryWrapper 查询条件封装对象
* @param 查询条件数据类型
* @param 查询数据类型
*/
- public static void buildQuery(Q query, Field field, QueryWrapper queryWrapper) {
+ public static void buildWrapper(Q query, Field field, QueryWrapper queryWrapper) {
boolean accessible = field.canAccess(query);
try {
field.setAccessible(true);
-
- String fieldName = field.getName();
- String columnName = StrUtil.toUnderlineCase(fieldName);
-
// 如果字段值为空,直接返回
Object fieldValue = field.get(query);
if (ObjectUtil.isEmpty(fieldValue)) {
return;
}
-
- // 获取 Query 注解信息
+ // 建议:数据库规范中列建议采用下划线连接法命名,程序规范中变量建议采用驼峰法命名
+ String fieldName = field.getName();
+ String columnName = StrUtil.toUnderlineCase(fieldName);
+ // 没有 @Query 注解,默认等值查询
Query queryAnnotation = field.getAnnotation(Query.class);
- // 没有@Query注解,默认走实体类的字段 EQ精确 查询;
- if (Objects.isNull(queryAnnotation)) {
+ if (null == queryAnnotation) {
queryWrapper.eq(columnName, fieldValue);
return;
}
-
+ // 解析单列查询
String[] columns = queryAnnotation.columns();
- if (ArrayUtils.isEmpty(columns)) {
- columnName = StrUtil.toUnderlineCase(columnName);
- } else if (columns.length == 1) {
- columnName = StrUtil.toUnderlineCase(columns[0]);
- } else {
- QueryType queryType = queryAnnotation.type();
- queryWrapper.and(wrapper -> {
- for (String column : columns) {
- String underline = StrUtil.toUnderlineCase(column);
- // 解析多属性查询
- switch (queryType) {
- case EQUAL -> queryWrapper.or().eq(underline, fieldValue);
- case NOT_EQUAL -> queryWrapper.or().ne(underline, fieldValue);
- case GREATER_THAN -> queryWrapper.or().gt(underline, fieldValue);
- case LESS_THAN -> queryWrapper.or().lt(underline, fieldValue);
- case GREATER_THAN_OR_EQUAL -> queryWrapper.or().ge(underline, fieldValue);
- case LESS_THAN_OR_EQUAL -> queryWrapper.or().le(underline, fieldValue);
- case BETWEEN -> {
- List