优化构建分页结果接口,增加RequestEntity、Page参数

This commit is contained in:
mxd
2021-05-11 08:04:50 +08:00
parent f4a1a46c69
commit 76c4d2c412
2 changed files with 20 additions and 5 deletions

View File

@@ -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);
}
/**

View File

@@ -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);
}