add BaseMapper.listOrder

This commit is contained in:
Timi
2025-10-13 10:53:55 +08:00
parent 831d36e095
commit 2fc06e3851
2 changed files with 18 additions and 5 deletions

View File

@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.UpdateProvider; import org.apache.ibatis.annotations.UpdateProvider;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 基本 SQL 映射,子接口可以不实现 * 基本 SQL 映射,子接口可以不实现
@ -46,6 +47,10 @@ public interface BaseMapper<T, P> {
@SelectProvider(type = SQLProvider.class, method = "count") @SelectProvider(type = SQLProvider.class, method = "count")
long count(); long count();
default List<T> list(long offset, int limit) {
return listOrder(offset, limit, null);
}
/** /**
* 获取部分数据 * 获取部分数据
* *
@ -53,8 +58,8 @@ public interface BaseMapper<T, P> {
* @param limit 数据量 * @param limit 数据量
* @return 数据列表 * @return 数据列表
*/ */
@SelectProvider(type = SQLProvider.class, method = "list") @SelectProvider(type = SQLProvider.class, method = "listOrder")
List<T> list(long offset, int limit); List<T> listOrder(long offset, int limit, Map<String, OrderType> orderMap);
/** /**
* 创建数据。默认自增主键为 id如需修改请重写此接口 * 创建数据。默认自增主键为 id如需修改请重写此接口

View File

@ -50,14 +50,22 @@ public class SQLProvider {
return sql.toString(); 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<String, BaseMapper.OrderType> orderMap) {
EntityMeta meta = getEntityMeta(context); EntityMeta meta = getEntityMeta(context);
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
sql.append("SELECT %s FROM `%s` WHERE 1 = 1".formatted(meta.selectAllClause, meta.table)); sql.append("SELECT %s FROM `%s` WHERE 1 = 1".formatted(meta.selectAllClause, meta.table));
if (meta.canDelete) { if (meta.canDelete) {
sql.append(" AND (`deleted_at` IS NULL OR %s < `deleted_at`)".formatted(Time.now())); 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<String, BaseMapper.OrderType> 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); return "`%s` = #{%s}".formatted(fc.columnName, fc.fieldName);
}) })
.collect(Collectors.joining(", ")); .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);
} }
/** /**