24282 há 1 ano atrás
pai
commit
cf16eebfbe

+ 6 - 12
sd-business/src/main/java/com/sd/business/util/sql/Fields.java

@@ -19,8 +19,7 @@ public class Fields<T> {
     private final Sql<T> sql;
 
     public <S, V> Fields<T> select(SFunction<S, V> function) {
-        LambdaMeta meta = LambdaUtils.extract(function);
-        sql.fieldList.add(FieldUtil.getSqlFieldName(sql.getTableAlias(meta), meta));
+        sql.fieldList.add(sql.getSqlFieldName(function));
         return this;
     }
 
@@ -48,8 +47,7 @@ public class Fields<T> {
 
     public <S, V> Fields<T> select(SFunction<S, V> function, SFunction<T, ?> asFunction) {
         String as = PropertyNamer.methodToProperty(LambdaUtils.extract(asFunction).getImplMethodName());
-        LambdaMeta meta = LambdaUtils.extract(function);
-        sql.fieldList.add(FieldUtil.getSqlFieldName(sql.getTableAlias(meta), meta) + StringPool.SPACE + as);
+        sql.fieldList.add(sql.getSqlFieldName(function) + StringPool.SPACE + as);
         return this;
     }
 
@@ -67,8 +65,7 @@ public class Fields<T> {
 
     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);
+        sql.fieldList.add("MAX(" + sql.getSqlFieldName(function) + ")" + StringPool.SPACE + as);
         return this;
     }
 
@@ -81,8 +78,7 @@ public class Fields<T> {
 
     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);
+        sql.fieldList.add("MIN(" + sql.getSqlFieldName(function) + ")" + StringPool.SPACE + as);
         return this;
     }
 
@@ -95,8 +91,7 @@ public class Fields<T> {
 
     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);
+        sql.fieldList.add("COUNT(" + sql.getSqlFieldName(function) + ")" + StringPool.SPACE + as);
         return this;
     }
 
@@ -109,8 +104,7 @@ public class Fields<T> {
 
     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);
+        sql.fieldList.add("SUM(" + sql.getSqlFieldName(function) + ")" + StringPool.SPACE + as);
         return this;
     }
 

+ 16 - 13
sd-business/src/main/java/com/sd/business/util/sql/Sql.java

@@ -1,11 +1,14 @@
 package com.sd.business.util.sql;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.baomidou.mybatisplus.core.toolkit.LambdaUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
 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 org.apache.ibatis.reflection.property.PropertyNamer;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -18,7 +21,7 @@ public class Sql<T> {
     protected final Class<T> resultCls;
     protected final List<String> fieldList = new ArrayList<>();
     protected final List<String> fromList = new ArrayList<>();
-    private final Map<Class<?>, String> tableAliasMap = new HashMap<>();
+    protected final Map<Class<?>, String> tableAliasMap = new HashMap<>();
     protected Boolean distinct = false;
 
     public Sql(Class<T> resultCls) {
@@ -29,26 +32,26 @@ public class Sql<T> {
         return new Fields<>(new Sql<>(cls));
     }
 
-    protected String getTableAlias(SFunction<?, ?> function) {
-        LambdaMeta meta = LambdaUtils.extract(function);
-        Class<?> cls = meta.getInstantiatedClass();
-        return getTableAlias(cls);
+    protected String getTableAlias(Class<?> cls) {
+        return tableAliasMap.computeIfAbsent(cls, itemCls -> "t" + (tableAliasMap.size() + 1));
     }
 
-    protected String getTableAlias(LambdaMeta meta) {
-        Class<?> cls = meta.getInstantiatedClass();
+    protected String getTableAlias(SFunction<?, ?> function) {
+        Class<?> cls = LambdaUtils.extract(function).getInstantiatedClass();
         return getTableAlias(cls);
     }
 
-    protected String getTableAlias(Class<?> cls) {
-        return tableAliasMap.computeIfAbsent(cls, itemCls -> "t" + (tableAliasMap.size() + 1));
+    protected <K, V> String getSqlFieldName(SFunction<K, V> function) {
+        LambdaMeta meta = LambdaUtils.extract(function);
+        String alias = getTableAlias(meta.getInstantiatedClass());
+        String fieldName = StrUtil.toUnderlineCase(PropertyNamer.methodToProperty(meta.getImplMethodName()));
+        return alias + StringPool.DOT + fieldName;
     }
 
     protected String getSql() {
-        return "SELECT " +
-                (distinct ? "DISTINCT " : "") +
-                CollectionUtil.join(fieldList, ",") +
-                CollectionUtil.join(fromList, "");
+        return "SELECT " + (distinct ? "DISTINCT " : StringPool.EMPTY) +
+                CollectionUtil.join(fieldList, StringPool.COMMA) +
+                CollectionUtil.join(fromList, StringPool.EMPTY);
     }
 
 }

+ 20 - 34
sd-business/src/main/java/com/sd/business/util/sql/Where.java

@@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
 import com.baomidou.mybatisplus.core.conditions.SharedString;
 import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
@@ -41,7 +42,7 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
      * 排序
      */
     public <K, V> Where<T> orderByAsc(SFunction<K, V> function) {
-        return orderByAsc(FieldUtil.getSqlFieldName(sql.getTableAlias(function), function));
+        return orderByAsc(sql.getSqlFieldName(function));
     }
 
     public <K, V> Where<T> orderByAsc(String alias, SFunction<K, V> function) {
@@ -49,7 +50,7 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
     }
 
     public <K, V> Where<T> orderByDesc(SFunction<K, V> function) {
-        return orderByDesc(FieldUtil.getSqlFieldName(sql.getTableAlias(function), function));
+        return orderByDesc(sql.getSqlFieldName(function));
     }
 
     public <K, V> Where<T> orderByDesc(String alias, SFunction<K, V> function) {
@@ -60,8 +61,7 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
      * between
      */
     public <K, V> Where<T> between(SFunction<K, V> function, Object val1, Object val2) {
-        String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
-        return between(sqlFieldName, val1, val2);
+        return between(sql.getSqlFieldName(function), val1, val2);
     }
 
     public <K, V> Where<T> between(String alias, SFunction<K, V> function, Object val1, Object val2) {
@@ -77,8 +77,7 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
      * eq
      */
     public <K, V> Where<T> eq(SFunction<K, V> function, Object value) {
-        String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
-        return eq(sqlFieldName, value);
+        return eq(sql.getSqlFieldName(function), value);
     }
 
     public <K, V> Where<T> eq(String alias, SFunction<K, V> function, Object value) {
@@ -94,8 +93,7 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
      * ne
      */
     public <K, V> Where<T> ne(SFunction<K, V> function, Object value) {
-        String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
-        return ne(sqlFieldName, value);
+        return ne(sql.getSqlFieldName(function), value);
     }
 
     public <K, V> Where<T> ne(String alias, SFunction<K, V> function, Object value) {
@@ -111,8 +109,7 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
      * ge
      */
     public <K, V> Where<T> ge(SFunction<K, V> function, Object value) {
-        String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
-        return ge(sqlFieldName, value);
+        return ge(sql.getSqlFieldName(function), value);
     }
 
     public <K, V> Where<T> ge(String alias, SFunction<K, V> function, Object value) {
@@ -128,8 +125,7 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
      * gt
      */
     public <K, V> Where<T> gt(SFunction<K, V> function, Object value) {
-        String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
-        return gt(sqlFieldName, value);
+        return gt(sql.getSqlFieldName(function), value);
     }
 
     public <K, V> Where<T> gt(String alias, SFunction<K, V> function, Object value) {
@@ -145,8 +141,7 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
      * le
      */
     public <K, V> Where<T> le(SFunction<K, V> function, Object value) {
-        String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
-        return le(sqlFieldName, value);
+        return le(sql.getSqlFieldName(function), value);
     }
 
     public <K, V> Where<T> le(String alias, SFunction<K, V> function, Object value) {
@@ -162,8 +157,7 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
      * lt
      */
     public <K, V> Where<T> lt(SFunction<K, V> function, Object value) {
-        String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
-        return lt(sqlFieldName, value);
+        return lt(sql.getSqlFieldName(function), value);
     }
 
     public <K, V> Where<T> lt(String alias, SFunction<K, V> function, Object value) {
@@ -179,8 +173,7 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
      * like
      */
     public <K, V> Where<T> like(SFunction<K, V> function, Object value) {
-        String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
-        return like(sqlFieldName, value);
+        return like(sql.getSqlFieldName(function), value);
     }
 
     public <K, V> Where<T> like(String alias, SFunction<K, V> function, Object value) {
@@ -189,15 +182,14 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
     }
 
     public Where<T> like(String sqlFieldName, Object value) {
-        return apply(ObjectUtil.isNotEmpty(value), "instr(" + sqlFieldName + ", {0}) > 0", value);
+        return apply(ObjectUtil.isNotEmpty(value), "INSTR(" + sqlFieldName + ", {0}) > 0", value);
     }
 
     /**
      * notLike
      */
     public <K, V> Where<T> notLike(SFunction<K, V> function, Object value) {
-        String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
-        return notLike(sqlFieldName, value);
+        return notLike(sql.getSqlFieldName(function), value);
     }
 
     public <K, V> Where<T> notLike(String alias, SFunction<K, V> function, Object value) {
@@ -213,8 +205,7 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
      * likeLeft
      */
     public <K, V> Where<T> likeLeft(SFunction<K, V> function, Object value) {
-        String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
-        return likeLeft(sqlFieldName, value);
+        return likeLeft(sql.getSqlFieldName(function), value);
     }
 
     public <K, V> Where<T> likeLeft(String alias, SFunction<K, V> function, Object value) {
@@ -230,8 +221,7 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
      * likeRight
      */
     public <K, V> Where<T> likeRight(SFunction<K, V> function, Object value) {
-        String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
-        return likeRight(sqlFieldName, value);
+        return likeRight(sql.getSqlFieldName(function), value);
     }
 
     public <K, V> Where<T> likeRight(String alias, SFunction<K, V> function, Object value) {
@@ -247,8 +237,7 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
      * in
      */
     public <K, V> Where<T> in(SFunction<K, V> function, Collection<?> value) {
-        String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
-        return in(sqlFieldName, value);
+        return in(sql.getSqlFieldName(function), value);
     }
 
     public <K, V> Where<T> in(String alias, SFunction<K, V> function, Collection<?> value) {
@@ -261,8 +250,7 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
     }
 
     public <K, V> Where<T> in(SFunction<K, V> function, Object... value) {
-        String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
-        return in(sqlFieldName, value);
+        return in(sql.getSqlFieldName(function), value);
     }
 
     public <K, V> Where<T> in(String alias, SFunction<K, V> function, Object... value) {
@@ -274,8 +262,7 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
      * notIn
      */
     public <K, V> Where<T> notIn(SFunction<K, V> function, Collection<?> value) {
-        String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
-        return notIn(sqlFieldName, value);
+        return notIn(sql.getSqlFieldName(function), value);
     }
 
     public <K, V> Where<T> notIn(String alias, SFunction<K, V> function, Collection<?> value) {
@@ -288,8 +275,7 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
     }
 
     public <K, V> Where<T> notIn(SFunction<K, V> function, Object... value) {
-        String sqlFieldName = FieldUtil.getSqlFieldName(sql.getTableAlias(function), function);
-        return notIn(sqlFieldName, value);
+        return notIn(sql.getSqlFieldName(function), value);
     }
 
     public <K, V> Where<T> notIn(String alias, SFunction<K, V> function, Object... value) {
@@ -326,7 +312,7 @@ public class Where<T> extends AbstractWrapper<T, String, Where<T>> {
     }
 
     public String getSql() {
-        return sql.getSql() + " " + getCustomSqlSegment();
+        return sql.getSql() + StringPool.SPACE + getCustomSqlSegment();
     }
 
 }