24282 1 éve
szülő
commit
3df5949e85

+ 61 - 0
sd-business/src/main/java/com/sd/business/util/sql/Fields.java

@@ -43,6 +43,67 @@ public class Fields<T> {
         return this;
     }
 
+    public Fields<T> distinct() {
+        sql.distinct = true;
+        return this;
+    }
+
+    public <S, V> Fields<T> max(SFunction<S, V> function, SFunction<T, ?> asFunction) {
+        String as = PropertyNamer.methodToProperty(LambdaUtils.extract(asFunction).getImplMethodName());
+        LambdaMeta meta = LambdaUtils.extract(function);
+        sql.fieldList.add("MAX(" + FieldUtil.getSqlFieldName(sql.getTableAlias(meta), meta) + ")" + StringPool.SPACE + as);
+        return this;
+    }
+
+    public <S, V> Fields<T> max(String alias, SFunction<S, V> function, SFunction<T, ?> asFunction) {
+        String as = PropertyNamer.methodToProperty(LambdaUtils.extract(asFunction).getImplMethodName());
+        LambdaMeta meta = LambdaUtils.extract(function);
+        sql.fieldList.add("MAX(" + FieldUtil.getSqlFieldName(alias, meta) + ")" + StringPool.SPACE + as);
+        return this;
+    }
+
+    public <S, V> Fields<T> min(SFunction<S, V> function, SFunction<T, ?> asFunction) {
+        String as = PropertyNamer.methodToProperty(LambdaUtils.extract(asFunction).getImplMethodName());
+        LambdaMeta meta = LambdaUtils.extract(function);
+        sql.fieldList.add("MIN(" + FieldUtil.getSqlFieldName(sql.getTableAlias(meta), meta) + ")" + StringPool.SPACE + as);
+        return this;
+    }
+
+    public <S, V> Fields<T> min(String alias, SFunction<S, V> function, SFunction<T, ?> asFunction) {
+        String as = PropertyNamer.methodToProperty(LambdaUtils.extract(asFunction).getImplMethodName());
+        LambdaMeta meta = LambdaUtils.extract(function);
+        sql.fieldList.add("MIN(" + FieldUtil.getSqlFieldName(alias, meta) + ")" + StringPool.SPACE + as);
+        return this;
+    }
+
+    public <S, V> Fields<T> count(SFunction<S, V> function, SFunction<T, ?> asFunction) {
+        String as = PropertyNamer.methodToProperty(LambdaUtils.extract(asFunction).getImplMethodName());
+        LambdaMeta meta = LambdaUtils.extract(function);
+        sql.fieldList.add("COUNT(" + FieldUtil.getSqlFieldName(sql.getTableAlias(meta), meta) + ")" + StringPool.SPACE + as);
+        return this;
+    }
+
+    public <S, V> Fields<T> count(String alias, SFunction<S, V> function, SFunction<T, ?> asFunction) {
+        String as = PropertyNamer.methodToProperty(LambdaUtils.extract(asFunction).getImplMethodName());
+        LambdaMeta meta = LambdaUtils.extract(function);
+        sql.fieldList.add("COUNT(" + FieldUtil.getSqlFieldName(alias, meta) + ")" + StringPool.SPACE + as);
+        return this;
+    }
+
+    public <S, V> Fields<T> sum(SFunction<S, V> function, SFunction<T, ?> asFunction) {
+        String as = PropertyNamer.methodToProperty(LambdaUtils.extract(asFunction).getImplMethodName());
+        LambdaMeta meta = LambdaUtils.extract(function);
+        sql.fieldList.add("SUM(" + FieldUtil.getSqlFieldName(sql.getTableAlias(meta), meta) + ")" + StringPool.SPACE + as);
+        return this;
+    }
+
+    public <S, V> Fields<T> sum(String alias, SFunction<S, V> function, SFunction<T, ?> asFunction) {
+        String as = PropertyNamer.methodToProperty(LambdaUtils.extract(asFunction).getImplMethodName());
+        LambdaMeta meta = LambdaUtils.extract(function);
+        sql.fieldList.add("SUM(" + FieldUtil.getSqlFieldName(alias, meta) + ")" + StringPool.SPACE + as);
+        return this;
+    }
+
     public Fields<T> selectAll(Class<?> cls) {
         return selectAll(sql.getTableAlias(cls), cls);
     }

+ 9 - 3
sd-business/src/main/java/com/sd/business/util/sql/Sql.java

@@ -6,14 +6,12 @@ import com.baomidou.mybatisplus.core.toolkit.LambdaUtils;
 import com.baomidou.mybatisplus.core.toolkit.support.LambdaMeta;
 import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.sd.business.util.sql.mapper.JoinMapper;
-import lombok.AllArgsConstructor;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-@AllArgsConstructor
 public class Sql<T> {
 
     protected static final JoinMapper mapper = SpringUtil.getBean(JoinMapper.class);
@@ -21,6 +19,11 @@ public class Sql<T> {
     protected final List<String> fieldList = new ArrayList<>();
     protected final List<String> fromList = new ArrayList<>();
     private final Map<Class<?>, String> tableAliasMap = new HashMap<>();
+    protected Boolean distinct = false;
+
+    public Sql(Class<T> resultCls) {
+        this.resultCls = resultCls;
+    }
 
     public static <T> Fields<T> create(Class<T> cls) {
         return new Fields<>(new Sql<>(cls));
@@ -42,7 +45,10 @@ public class Sql<T> {
     }
 
     protected String getSql() {
-        return "SELECT " + CollectionUtil.join(fieldList, ",") + CollectionUtil.join(fromList, "");
+        return "SELECT " +
+                (distinct ? "DISTINCT " : "") +
+                CollectionUtil.join(fieldList, ",") +
+                CollectionUtil.join(fromList, "");
     }
 
 }