Przeglądaj źródła

新增`NamedTable`、`Where`类的page`(limit, offset)`方法

mxd 3 lat temu
rodzic
commit
024ed0249a

+ 2 - 1
magic-api/src/main/java/org/ssssssss/magicapi/modules/SQLModule.java

@@ -407,7 +407,8 @@ public class SQLModule extends HashMap<String, SQLModule> implements MagicModule
 		return page(boundSql, page);
 	}
 
-	private Object page(BoundSql boundSql, Page page) {
+	@UnableCall
+	public Object page(BoundSql boundSql, Page page) {
 		assertDatasourceNotNull();
 		Dialect dialect = dataSourceNode.getDialect(dialectAdapter);
 		BoundSql countBoundSql = boundSql.copy(dialect.getCountSql(boundSql.getSql()));

+ 11 - 5
magic-api/src/main/java/org/ssssssss/magicapi/modules/table/NamedTable.java

@@ -2,6 +2,7 @@ package org.ssssssss.magicapi.modules.table;
 
 import org.apache.commons.lang3.StringUtils;
 import org.ssssssss.magicapi.exception.MagicAPIException;
+import org.ssssssss.magicapi.model.Page;
 import org.ssssssss.magicapi.modules.BoundSql;
 import org.ssssssss.magicapi.modules.SQLModule;
 import org.ssssssss.script.annotation.Comment;
@@ -109,7 +110,7 @@ public class NamedTable {
 	@Comment("设置要排除的列")
 	public NamedTable exclude(String column) {
 		if (column != null) {
-			excludeColumns.add(column);
+			excludeColumns.add(rowMapColumnMapper.apply(column));
 		}
 		return this;
 	}
@@ -117,7 +118,7 @@ public class NamedTable {
 	@Comment("设置要排除的列")
 	public NamedTable excludes(String... columns) {
 		if (columns != null) {
-			excludeColumns.addAll(Arrays.asList(columns));
+			excludeColumns.addAll(Arrays.stream(columns).map(rowMapColumnMapper).collect(Collectors.toList()));
 		}
 		return this;
 	}
@@ -125,7 +126,7 @@ public class NamedTable {
 	@Comment("设置要排除的列")
 	public NamedTable excludes(List<String> columns) {
 		if (columns != null) {
-			excludeColumns.addAll(columns);
+			excludeColumns.addAll(columns.stream().map(rowMapColumnMapper).collect(Collectors.toList()));
 		}
 		return this;
 	}
@@ -148,7 +149,7 @@ public class NamedTable {
 
 	@Comment("拼接`order by xxx asc/desc`")
 	public NamedTable orderBy(@Comment("要排序的列") String column, @Comment("`asc`或`desc`") String sort) {
-		this.orders.add(column + " " + sort);
+		this.orders.add(rowMapColumnMapper.apply(column) + " " + sort);
 		return this;
 	}
 
@@ -164,7 +165,7 @@ public class NamedTable {
 
 	@Comment("拼接`group by`")
 	public NamedTable groupBy(@Comment("要分组的列") String... columns) {
-		this.groups.addAll(Arrays.asList(columns));
+		this.groups.addAll(Arrays.stream(columns).map(rowMapColumnMapper).collect(Collectors.toList()));
 		return this;
 	}
 
@@ -328,6 +329,11 @@ public class NamedTable {
 		return sqlModule.page(buildSelect());
 	}
 
+	@Comment("执行分页查询,分页条件手动传入")
+	public Object page(@Comment("限制条数") long limit, @Comment("跳过条数") long offset) {
+		return sqlModule.page(buildSelect(), new Page(limit, offset));
+	}
+
 	@Comment("执行update语句")
 	public int update() {
 		return update(null);

+ 13 - 8
magic-api/src/main/java/org/ssssssss/magicapi/modules/table/Where.java

@@ -100,7 +100,7 @@ public class Where {
 
 	@Comment("是否过滤`blank`的参数")
 	public Where notBlank(boolean flag) {
-		this.notNull = flag;
+		this.notBlank = flag;
 		return this;
 	}
 
@@ -119,7 +119,7 @@ public class Where {
 	@Comment("等于`=`,如:`eq('name', '老王') ---> name = '老王'`")
 	public Where eq(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		if (condition && filterNullAndBlank(value)) {
-			tokens.add(column);
+			tokens.add(namedTable.rowMapColumnMapper.apply(column));
 			if (value == null) {
 				append(" is null");
 			} else {
@@ -139,7 +139,7 @@ public class Where {
 	@Comment("不等于`<>`,如:`ne('name', '老王') ---> name <> '老王'`")
 	public Where ne(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column, @Comment("值") Object value) {
 		if (condition && filterNullAndBlank(value)) {
-			append(column);
+			append(namedTable.rowMapColumnMapper.apply(column));
 			if (value == null) {
 				append("is not null");
 			} else {
@@ -153,7 +153,7 @@ public class Where {
 
 	private Where append(boolean append, String column, String condition, Object value) {
 		if (append && filterNullAndBlank(value)) {
-			append(column);
+			append(namedTable.rowMapColumnMapper.apply(column));
 			append(condition);
 			appendAnd();
 			params.add(value);
@@ -211,7 +211,7 @@ public class Where {
 		if (condition && value != null) {
 			List<Object> objects = StreamExtension.arrayLikeToList(value);
 			if (objects.size() > 0) {
-				append(column);
+				append(namedTable.rowMapColumnMapper.apply(column));
 				append(" in (");
 				append(String.join(",", Collections.nCopies(objects.size(), "?")));
 				append(")");
@@ -232,7 +232,7 @@ public class Where {
 		if (condition && value != null) {
 			List<Object> objects = StreamExtension.arrayLikeToList(value);
 			if (objects.size() > 0) {
-				append(column);
+				append(namedTable.rowMapColumnMapper.apply(column));
 				append("not in (");
 				append(String.join(",", Collections.nCopies(objects.size(), "?")));
 				append(")");
@@ -271,7 +271,7 @@ public class Where {
 	@Comment("`is null`,如:`isNull('name') ---> name is null")
 	public Where isNull(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column) {
 		if (condition) {
-			append(column);
+			append(namedTable.rowMapColumnMapper.apply(column));
 			append("is null");
 			appendAnd();
 		}
@@ -286,7 +286,7 @@ public class Where {
 	@Comment("`is not null`,如:`isNotNull('name') ---> name is not null")
 	public Where isNotNull(@Comment("判断表达式,当为true时拼接条件") boolean condition, @Comment("数据库中的列名") String column) {
 		if (condition) {
-			append(column);
+			append(namedTable.rowMapColumnMapper.apply(column));
 			append("is not null");
 			appendAnd();
 		}
@@ -399,6 +399,11 @@ public class Where {
 		return namedTable.page();
 	}
 
+	@Comment("执行分页查询,分页条件手动传入")
+	public Object page(@Comment("限制条数") long limit, @Comment("跳过条数") long offset) {
+		return namedTable.page(limit, offset);
+	}
+
 	@Comment("执行select查询")
 	public List<Map<String, Object>> select() {
 		return namedTable.select();