mirror of
https://gitee.com/ssssssss-team/magic-api.git
synced 2026-06-19 20:17:22 +08:00
优化构建分页结果接口,增加RequestEntity、Page参数
This commit is contained in:
@@ -12,9 +12,11 @@ import org.ssssssss.magicapi.cache.SqlCache;
|
||||
import org.ssssssss.magicapi.config.MagicDynamicDataSource;
|
||||
import org.ssssssss.magicapi.config.MagicDynamicDataSource.DataSourceNode;
|
||||
import org.ssssssss.magicapi.config.MagicModule;
|
||||
import org.ssssssss.magicapi.context.RequestContext;
|
||||
import org.ssssssss.magicapi.dialect.Dialect;
|
||||
import org.ssssssss.magicapi.interceptor.SQLInterceptor;
|
||||
import org.ssssssss.magicapi.model.Page;
|
||||
import org.ssssssss.magicapi.model.RequestEntity;
|
||||
import org.ssssssss.magicapi.modules.table.NamedTable;
|
||||
import org.ssssssss.magicapi.provider.PageProvider;
|
||||
import org.ssssssss.magicapi.provider.ResultProvider;
|
||||
@@ -338,26 +340,27 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
|
||||
@Comment("执行分页查询,分页条件手动传入")
|
||||
public Object page(@Comment("`SQL`语句") String sql, @Comment("限制条数") long limit, @Comment("跳过条数") long offset) {
|
||||
BoundSql boundSql = new BoundSql(sql, this);
|
||||
return page(boundSql, limit, offset);
|
||||
return page(boundSql, new Page(limit, offset));
|
||||
}
|
||||
|
||||
@UnableCall
|
||||
public Object page(BoundSql boundSql) {
|
||||
Page page = pageProvider.getPage(MagicScriptContext.get());
|
||||
return page(boundSql, page.getLimit(), page.getOffset());
|
||||
return page(boundSql, page);
|
||||
}
|
||||
|
||||
private Object page(BoundSql boundSql, long limit, long offset) {
|
||||
private Object page(BoundSql boundSql, Page page) {
|
||||
Dialect dialect = dataSourceNode.getDialect(dialectAdapter);
|
||||
BoundSql countBoundSql = boundSql.copy(dialect.getCountSql(boundSql.getSql()));
|
||||
int count = countBoundSql.getCacheValue(this.sqlInterceptors, () -> dataSourceNode.getJdbcTemplate().queryForObject(countBoundSql.getSql(), Integer.class, countBoundSql.getParameters()));
|
||||
List<Map<String, Object>> list = null;
|
||||
if (count > 0) {
|
||||
String pageSql = dialect.getPageSql(boundSql.getSql(), boundSql, offset, limit);
|
||||
String pageSql = dialect.getPageSql(boundSql.getSql(), boundSql, page.getOffset(), page.getLimit());
|
||||
BoundSql pageBoundSql = boundSql.copy(pageSql);
|
||||
list = pageBoundSql.getCacheValue(this.sqlInterceptors, () -> dataSourceNode.getJdbcTemplate().query(pageBoundSql.getSql(), this.columnMapRowMapper, pageBoundSql.getParameters()));
|
||||
}
|
||||
return resultProvider.buildPageResult(count, list);
|
||||
RequestEntity requestEntity = RequestContext.getRequestEntity();
|
||||
return resultProvider.buildPageResult(requestEntity, page, count, list);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.ssssssss.magicapi.provider;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.ssssssss.magicapi.model.Page;
|
||||
import org.ssssssss.magicapi.model.PageResult;
|
||||
import org.ssssssss.magicapi.model.RequestEntity;
|
||||
import org.ssssssss.script.exception.MagicScriptAssertException;
|
||||
@@ -84,9 +85,20 @@ public interface ResultProvider {
|
||||
Object buildResult(RequestEntity requestEntity, int code, String message, Object data);
|
||||
|
||||
/**
|
||||
* @param requestEntity 请求相关信息
|
||||
* @param page 分页对象
|
||||
* @param total 总数
|
||||
* @param data 数据内容
|
||||
*/
|
||||
default Object buildPageResult(RequestEntity requestEntity, Page page, long total, List<Map<String, Object>> data) {
|
||||
return buildPageResult(total, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param total 总数
|
||||
* @param data 数据内容
|
||||
*/
|
||||
@Deprecated
|
||||
default Object buildPageResult(long total, List<Map<String, Object>> data) {
|
||||
return new PageResult<>(total, data);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user