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 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,如需修改请重写此接口
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user