Преглед на файлове

增加`order by`、`group by`

mxd преди 4 години
родител
ревизия
90fee5d149
променени са 2 файла, в които са добавени 57 реда и са изтрити 4 реда
  1. 34 0
      src/main/java/org/ssssssss/magicapi/modules/table/NamedTable.java
  2. 23 4
      src/main/java/org/ssssssss/magicapi/modules/table/Where.java

+ 34 - 0
src/main/java/org/ssssssss/magicapi/modules/table/NamedTable.java

@@ -22,6 +22,10 @@ public class NamedTable {
 
 	List<String> fields = new ArrayList<>();
 
+	List<String> groups = new ArrayList<>();
+
+	List<String> orders = new ArrayList<>();
+
 	Function<String, String> rowMapColumnMapper;
 
 	Object defaultPrimaryValue;
@@ -83,6 +87,28 @@ public class NamedTable {
 		return this;
 	}
 
+	@Comment("拼接`order by xxx asc/desc`")
+	public NamedTable orderBy(@Comment("要排序的列") String column, @Comment("`asc`或`desc`") String sort) {
+		this.orders.add(column + " " + sort);
+		return this;
+	}
+
+	@Comment("拼接`order by xxx asc`")
+	public NamedTable orderBy(@Comment("要排序的列") String column) {
+		return orderBy(column, "asc");
+	}
+
+	@Comment("拼接`order by xxx desc`")
+	public NamedTable orderByDesc(@Comment("要排序的列") String column) {
+		return orderBy(column, "desc");
+	}
+
+	@Comment("拼接`group by`")
+	public NamedTable groupBy(@Comment("要分组的列") String ... columns) {
+		this.groups.addAll(Arrays.asList(columns));
+		return this;
+	}
+
 	private List<Map.Entry<String, Object>> filterNotBlanks() {
 		return this.columns.entrySet().stream()
 				.filter(it -> StringUtils.isNotBlank(Objects.toString(it.getValue(), "")))
@@ -170,6 +196,14 @@ public class NamedTable {
 			builder.append(where.getSql());
 			params.addAll(where.getParams());
 		}
+		if(!orders.isEmpty()){
+			builder.append(" order by ");
+			builder.append(String.join(",", orders));
+		}
+		if(!groups.isEmpty()){
+			builder.append(" group by ");
+			builder.append(String.join(",", groups));
+		}
 		return new BoundSql(builder.toString(), params, sqlModule);
 	}
 

+ 23 - 4
src/main/java/org/ssssssss/magicapi/modules/table/Where.java

@@ -4,10 +4,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.ssssssss.script.annotation.Comment;
 import org.ssssssss.script.functions.StreamExtension;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.function.Function;
 
 public class Where {
@@ -293,6 +290,28 @@ public class Where {
 		return this;
 	}
 
+	@Comment("拼接`order by xxx asc/desc`")
+	public Where orderBy(@Comment("要排序的列") String column, @Comment("`asc`或`desc`") String sort) {
+		this.namedTable.orderBy(column, sort);
+		return this;
+	}
+
+	@Comment("拼接`order by xxx asc`")
+	public Where orderBy(@Comment("要排序的列") String column) {
+		return orderBy(column, "asc");
+	}
+
+	@Comment("拼接`order by xxx desc`")
+	public Where orderByDesc(@Comment("要排序的列") String column) {
+		return orderBy(column, "desc");
+	}
+
+	@Comment("拼接`group by`")
+	public Where groupBy(@Comment("要分组的列") String ... columns) {
+		this.namedTable.groupBy(columns);
+		return this;
+	}
+
 	@Comment("保存到表中,当主键有值时则修改,否则插入")
 	public Object save() {
 		return namedTable.save();