Эх сурвалжийг харах

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

mxd 4 жил өмнө
parent
commit
76c4d2c412

+ 8 - 5
src/main/java/org/ssssssss/magicapi/modules/SQLModule.java

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

+ 12 - 0
src/main/java/org/ssssssss/magicapi/provider/ResultProvider.java

@@ -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;
@@ -83,10 +84,21 @@ 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);
 	}