diff --git a/ruoyi-plugins/ruoyi-mybatis-jpa/src/main/java/com/ruoyi/mybatis/annotation/Table.java b/ruoyi-plugins/ruoyi-mybatis-jpa/src/main/java/com/ruoyi/mybatis/annotation/Table.java index c971b15..fb3619e 100644 --- a/ruoyi-plugins/ruoyi-mybatis-jpa/src/main/java/com/ruoyi/mybatis/annotation/Table.java +++ b/ruoyi-plugins/ruoyi-mybatis-jpa/src/main/java/com/ruoyi/mybatis/annotation/Table.java @@ -5,14 +5,10 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -/** - * 标注数据库 - * - * @author Dftre - */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface Table { String name(); String[] columns() default {}; + String[] orderBy() default {}; } diff --git a/ruoyi-plugins/ruoyi-mybatis-jpa/src/main/java/com/ruoyi/mybatis/domain/ColumnInfo.java b/ruoyi-plugins/ruoyi-mybatis-jpa/src/main/java/com/ruoyi/mybatis/domain/ColumnInfo.java index cd60128..1f588eb 100644 --- a/ruoyi-plugins/ruoyi-mybatis-jpa/src/main/java/com/ruoyi/mybatis/domain/ColumnInfo.java +++ b/ruoyi-plugins/ruoyi-mybatis-jpa/src/main/java/com/ruoyi/mybatis/domain/ColumnInfo.java @@ -1,17 +1,15 @@ package com.ruoyi.mybatis.domain; import java.lang.reflect.Field; +import java.util.Map; import org.springframework.core.annotation.AnnotationUtils; +import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.mybatis.annotation.Column; import com.ruoyi.mybatis.annotation.Query; +import com.ruoyi.mybatis.enums.QueryEnum; -/** - * 数据库字段信息 - * - * @author Dftre - */ public class ColumnInfo { private String columnName; private String fieldName; @@ -50,6 +48,20 @@ public class ColumnInfo { return this.column.primaryKey(); } + public boolean fieldQueryIsNotNull(Object entity) { + try { + if (this.query != null && this.query.operation().equals(QueryEnum.between)) { + BaseEntity baseEntity = (BaseEntity) entity; + Map map = baseEntity.getParams(); + return map.get(this.query.section()[0]) != null && map.get(this.query.section()[1]) != null; + } else { + return this.field.get(entity) != null; + } + } catch (IllegalAccessException e) { + throw new RuntimeException("Failed to access field for building query conditions.", e); + } + } + public boolean fieldIsNotNull(Object entity) { try { return this.field.get(entity) != null; diff --git a/ruoyi-plugins/ruoyi-mybatis-jpa/src/main/java/com/ruoyi/mybatis/domain/TableInfo.java b/ruoyi-plugins/ruoyi-mybatis-jpa/src/main/java/com/ruoyi/mybatis/domain/TableInfo.java index 410e4c4..bdd1ad4 100644 --- a/ruoyi-plugins/ruoyi-mybatis-jpa/src/main/java/com/ruoyi/mybatis/domain/TableInfo.java +++ b/ruoyi-plugins/ruoyi-mybatis-jpa/src/main/java/com/ruoyi/mybatis/domain/TableInfo.java @@ -75,6 +75,10 @@ public class TableInfo { } } + public String[] getOrderBy() { + return this.table.orderBy(); + } + public boolean hasDataScope() { return this.hasDataScopeValue; } @@ -126,6 +130,12 @@ public class TableInfo { return mapColumns; } + public List getNotNullColumnsForQuery(T entity) { + return this.columns.stream() + .filter(column -> column.fieldQueryIsNotNull(entity)) + .collect(Collectors.toList()); + } + public List getNotNullColumns(T entity) { return this.columns.stream() .filter(column -> column.fieldIsNotNull(entity)) diff --git a/ruoyi-plugins/ruoyi-mybatis-jpa/src/main/java/com/ruoyi/mybatis/utils/SQLUtil.java b/ruoyi-plugins/ruoyi-mybatis-jpa/src/main/java/com/ruoyi/mybatis/utils/SQLUtil.java index 17d8cc3..ba738ce 100644 --- a/ruoyi-plugins/ruoyi-mybatis-jpa/src/main/java/com/ruoyi/mybatis/utils/SQLUtil.java +++ b/ruoyi-plugins/ruoyi-mybatis-jpa/src/main/java/com/ruoyi/mybatis/utils/SQLUtil.java @@ -1,6 +1,7 @@ package com.ruoyi.mybatis.utils; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -41,7 +42,7 @@ public class SQLUtil { tableInfo.getNotNullMapColumns(entity).stream() .map(MapColumnInfo::getQuerySql) .forEach(sql::WHERE); - tableInfo.getNotNullColumns(entity).stream() + tableInfo.getNotNullColumnsForQuery(entity).stream() .map(ColumnInfo::getQuerySql) .map(query -> tableInfo.getTableNameT() + "." + query) .forEach(sql::WHERE); @@ -49,10 +50,15 @@ public class SQLUtil { sql.WHERE("1=1 ${params.dataScope}"); } + Arrays.stream(tableInfo.getOrderBy()) + .map(order -> tableInfo.getTableNameT() + "." + order) + .forEach(sql::ORDER_BY); } else { - tableInfo.getNotNullColumns(entity).stream() + tableInfo.getNotNullColumnsForQuery(entity).stream() .map(ColumnInfo::getQuerySql) .forEach(sql::WHERE); + Arrays.stream(tableInfo.getOrderBy()) + .forEach(sql::ORDER_BY); } return sql.toString(); } @@ -109,10 +115,6 @@ public class SQLUtil { .map(column -> tableInfo.getTableNameT() + "." + column.getColumnName() + " = " + column.getTemplate()) .forEach(sql::WHERE); - - if (tableInfo.hasDataScope()) { - sql.WHERE("1=1 ${params.dataScope}"); - } } else { tableInfo.getPrimaryKeys().stream() .map(column -> column.getColumnName() + " = " + column.getTemplate())