diff --git a/src/main/java/com/imyeyu/spring/mapper/BaseMapper.java b/src/main/java/com/imyeyu/spring/mapper/BaseMapper.java index 0488a01..8876157 100644 --- a/src/main/java/com/imyeyu/spring/mapper/BaseMapper.java +++ b/src/main/java/com/imyeyu/spring/mapper/BaseMapper.java @@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.SelectProvider; import org.apache.ibatis.annotations.UpdateProvider; import java.util.List; +import java.util.Map; /** * 基本 SQL 映射,子接口可以不实现 @@ -46,6 +47,10 @@ public interface BaseMapper { @SelectProvider(type = SQLProvider.class, method = "count") long count(); + default List list(long offset, int limit) { + return listOrder(offset, limit, null); + } + /** * 获取部分数据 * @@ -53,8 +58,8 @@ public interface BaseMapper { * @param limit 数据量 * @return 数据列表 */ - @SelectProvider(type = SQLProvider.class, method = "list") - List list(long offset, int limit); + @SelectProvider(type = SQLProvider.class, method = "listOrder") + List listOrder(long offset, int limit, Map orderMap); /** * 创建数据。默认自增主键为 id,如需修改请重写此接口 diff --git a/src/main/java/com/imyeyu/spring/util/SQLProvider.java b/src/main/java/com/imyeyu/spring/util/SQLProvider.java index aa8b7ce..618b31c 100644 --- a/src/main/java/com/imyeyu/spring/util/SQLProvider.java +++ b/src/main/java/com/imyeyu/spring/util/SQLProvider.java @@ -50,14 +50,22 @@ public class SQLProvider { return sql.toString(); } - public String list(ProviderContext context, @Param("offset") Long offset, @Param("limit") Integer limit) { + public String listOrder(ProviderContext context, @Param("offset") Long offset, @Param("limit") Integer limit, @Param("orderMap") Map orderMap) { EntityMeta meta = getEntityMeta(context); StringBuilder sql = new StringBuilder(); sql.append("SELECT %s FROM `%s` WHERE 1 = 1".formatted(meta.selectAllClause, meta.table)); if (meta.canDelete) { sql.append(" AND (`deleted_at` IS NULL OR %s < `deleted_at`)".formatted(Time.now())); } - return sql.append(" LIMIT #{offset}, #{limit}").toString(); + if (TimiJava.isNotEmpty(orderMap)) { + sql.append(" ORDER BY "); + for (Map.Entry item : orderMap.entrySet()) { + sql.append(Text.camelCase2underscore(item.getKey())).append(' ').append(item.getValue().toString()); + sql.append(", "); + } + sql.deleteCharAt(sql.length() - 2); + } + return sql.append(" LIMIT %s, %s".formatted(offset, limit)).toString(); } /** @@ -171,7 +179,7 @@ public class SQLProvider { return "`%s` = #{%s}".formatted(fc.columnName, fc.fieldName); }) .collect(Collectors.joining(", ")); - return "UPDATE `%s` SET `%s` WHERE `%s` = #{%s}".formatted(meta.table, setClause, meta.idFieldColumn.columnName, meta.idFieldColumn.fieldName); + return "UPDATE `%s` SET %s WHERE `%s` = #{%s}".formatted(meta.table, setClause, meta.idFieldColumn.columnName, meta.idFieldColumn.fieldName); } /**