Kaynağa Gözat

mp工具类

24282 1 yıl önce
ebeveyn
işleme
674fa3ca8e

+ 0 - 79
sd-framework/src/main/java/com/sd/framework/util/sql/FieldUtil.java

@@ -1,79 +0,0 @@
-package com.sd.framework.util.sql;
-
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.annotation.TableName;
-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 org.apache.ibatis.reflection.property.PropertyNamer;
-
-import java.lang.annotation.Annotation;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-public class FieldUtil {
-
-    private static final Map<Class<?>, String> tableAliasMap = new ConcurrentHashMap<>();
-    private static final Map<Class<?>, String> tableNameMap = new ConcurrentHashMap<>();
-
-    /**
-     * 获取sql字段名
-     * 例:getSqlFieldName(DemoEntity::getBaseId) -》 return "de.base_id"
-     */
-    public static <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;
-    }
-
-    /**
-     * 获取sql字段名
-     * 例:getSqlFieldName("s", DemoEntity::getBaseId) -》 return "s.base_id"
-     */
-    public static <K, V> String getSqlFieldName(String alias, SFunction<K, V> function) {
-        LambdaMeta meta = LambdaUtils.extract(function);
-        String fieldName = StrUtil.toUnderlineCase(PropertyNamer.methodToProperty(meta.getImplMethodName()));
-        return alias + StringPool.DOT + fieldName;
-    }
-
-    /**
-     * 获取表别名
-     */
-    public static String getTableAlias(Class<?> cls) {
-        return tableAliasMap.computeIfAbsent(cls, itemCls -> {
-            String tableName = getTableName(cls);
-            StringBuilder aliasBuilder = new StringBuilder();
-            for (String item : tableName.split("_")) {
-                aliasBuilder.append(item, 0, 1);
-            }
-            return aliasBuilder.toString();
-        });
-    }
-
-    /**
-     * 获取表名
-     */
-    public static String getTableName(Class<?> cls) {
-        return tableNameMap.computeIfAbsent(cls, itemCls -> {
-            Annotation[] annotations = itemCls.getAnnotations();
-            TableName tableName = null;
-            for (Annotation annotation : annotations) {
-                if (annotation instanceof TableName) {
-                    tableName = (TableName) annotation;
-                    break;
-                }
-            }
-            String tableNameStr = null;
-            if (tableName != null) {
-                tableNameStr = tableName.value();
-            }
-            if (StrUtil.isBlank(tableNameStr)) {
-                tableNameStr = StrUtil.toUnderlineCase(itemCls.getSimpleName());
-            }
-            return tableNameStr;
-        });
-    }
-
-}

+ 3 - 3
sd-framework/src/main/java/com/sd/framework/util/sql/From.java

@@ -25,7 +25,7 @@ public class From<T> extends Where<T> {
     }
 
     public <K, V> From<T> leftJoin(String as1, Class<K> cls1, SFunction<K, ?> on1, String as2, SFunction<V, ?> on2) {
-        sql.fromList.add(" LEFT JOIN " + FieldUtil.getTableName(cls1) + " " + as1 + " ON " +
+        sql.fromList.add(" LEFT JOIN " + Sql.getTableName(cls1) + " " + as1 + " ON " +
                 sql.getSqlFieldName(as1, on1) + " = " + sql.getSqlFieldName(as2, on2));
         return this;
     }
@@ -43,7 +43,7 @@ public class From<T> extends Where<T> {
     }
 
     public <K, V> From<T> rightJoin(String as1, Class<K> cls1, SFunction<K, ?> on1, String as2, SFunction<V, ?> on2) {
-        sql.fromList.add(" RIGHT JOIN " + FieldUtil.getTableName(cls1) + " " + as1 + " ON " +
+        sql.fromList.add(" RIGHT JOIN " + Sql.getTableName(cls1) + " " + as1 + " ON " +
                 sql.getSqlFieldName(as1, on1) + " = " + sql.getSqlFieldName(as2, on2));
         return this;
     }
@@ -61,7 +61,7 @@ public class From<T> extends Where<T> {
     }
 
     public <K, V> From<T> innerJoin(String as1, Class<K> cls1, SFunction<K, ?> on1, String as2, SFunction<V, ?> on2) {
-        sql.fromList.add(" INNER JOIN " + FieldUtil.getTableName(cls1) + " " + as1 + " ON " +
+        sql.fromList.add(" INNER JOIN " + Sql.getTableName(cls1) + " " + as1 + " ON " +
                 sql.getSqlFieldName(as1, on1) + " = " + sql.getSqlFieldName(as2, on2));
         return this;
     }

+ 1 - 1
sd-framework/src/main/java/com/sd/framework/util/sql/Select.java

@@ -142,7 +142,7 @@ public class Select<T> {
     }
 
     public From<T> from(String alias, Class<?> cls) {
-        String tableName = FieldUtil.getTableName(cls);
+        String tableName = Sql.getTableName(cls);
         sql.fromList.add(" FROM " + tableName + " " + alias);
         return new From<>(sql);
     }

+ 29 - 0
sd-framework/src/main/java/com/sd/framework/util/sql/Sql.java

@@ -3,6 +3,7 @@ package com.sd.framework.util.sql;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.core.toolkit.LambdaUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.support.LambdaMeta;
@@ -10,14 +11,18 @@ import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.sd.framework.util.sql.mapper.JoinMapper;
 import org.apache.ibatis.reflection.property.PropertyNamer;
 
+import java.lang.annotation.Annotation;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 public class Sql<T> {
 
+    protected static final Map<Class<?>, String> tableNameMap = new ConcurrentHashMap<>();
     protected static final JoinMapper mapper = SpringUtil.getBean(JoinMapper.class);
+
     protected final Class<T> resultCls;
     protected final List<String> fieldList = new ArrayList<>();
     protected final List<String> fromList = new ArrayList<>();
@@ -60,4 +65,28 @@ public class Sql<T> {
                 CollectionUtil.join(fromList, StringPool.EMPTY);
     }
 
+    /**
+     * 获取表名
+     */
+    protected static String getTableName(Class<?> cls) {
+        return tableNameMap.computeIfAbsent(cls, itemCls -> {
+            Annotation[] annotations = itemCls.getAnnotations();
+            TableName tableName = null;
+            for (Annotation annotation : annotations) {
+                if (annotation instanceof TableName) {
+                    tableName = (TableName) annotation;
+                    break;
+                }
+            }
+            String tableNameStr = null;
+            if (tableName != null) {
+                tableNameStr = tableName.value();
+            }
+            if (StrUtil.isBlank(tableNameStr)) {
+                tableNameStr = StrUtil.toUnderlineCase(itemCls.getSimpleName());
+            }
+            return tableNameStr;
+        });
+    }
+
 }