add BaseMapper.listOrder
This commit is contained in:
@ -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<T, P> {
|
||||
@SelectProvider(type = SQLProvider.class, method = "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 数据量
|
||||
* @return 数据列表
|
||||
*/
|
||||
@SelectProvider(type = SQLProvider.class, method = "list")
|
||||
List<T> list(long offset, int limit);
|
||||
@SelectProvider(type = SQLProvider.class, method = "listOrder")
|
||||
List<T> listOrder(long offset, int limit, Map<String, OrderType> orderMap);
|
||||
|
||||
/**
|
||||
* 创建数据。默认自增主键为 id,如需修改请重写此接口
|
||||
|
||||
@ -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<String, BaseMapper.OrderType> 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<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);
|
||||
})
|
||||
.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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user