Преглед изворни кода

Merge remote-tracking branch 'origin/3.0' into 3.0

hubin пре 7 година
родитељ
комит
6048d9f24c

+ 19 - 6
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/LambdaUtils.java

@@ -1,12 +1,15 @@
 package com.baomidou.mybatisplus.core.toolkit;
 
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import com.baomidou.mybatisplus.core.toolkit.support.Property;
+import com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda;
+
 import java.lang.ref.WeakReference;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
 import java.util.WeakHashMap;
-
-import com.baomidou.mybatisplus.core.toolkit.support.Property;
-import com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * Lambda 工具类
@@ -16,12 +19,10 @@ import com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda;
  */
 public final class LambdaUtils {
 
+    private static final Map<String, Map<String, String>> LAMBDA_CACHE = new ConcurrentHashMap<>();
     // 做个小小的缓存
     private static final Map<Class, WeakReference<SerializedLambda>> CACHE = new WeakHashMap<>();
 
-    private LambdaUtils() {
-    }
-
     /**
      * 解析 lambda 表达式
      *
@@ -40,4 +41,16 @@ public final class LambdaUtils {
             });
     }
 
+    public static void createCache(String className, TableInfo tableInfo) {
+        LAMBDA_CACHE.put(className, createLambdaMap(tableInfo));
+    }
+
+    private static Map<String, String> createLambdaMap(TableInfo tableInfo) {
+        Map<String, String> map = new HashMap<>();
+        if (StringUtils.isNotEmpty(tableInfo.getKeyProperty())) {
+            map.put(tableInfo.getKeyProperty(), tableInfo.getKeyColumn());
+        }
+        tableInfo.getFieldList().forEach(i -> map.put(i.getProperty(), i.getColumn()));
+        return map;
+    }
 }

+ 16 - 25
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/TableInfoHelper.java

@@ -15,14 +15,16 @@
  */
 package com.baomidou.mybatisplus.core.toolkit;
 
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.concurrent.ConcurrentHashMap;
-
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.core.config.DbConfig;
+import com.baomidou.mybatisplus.core.config.GlobalConfig;
+import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
+import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
+import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import com.baomidou.mybatisplus.core.toolkit.sql.SqlHelper;
+import com.baomidou.mybatisplus.core.toolkit.support.Property;
+import com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda;
 import org.apache.ibatis.builder.MapperBuilderAssistant;
 import org.apache.ibatis.executor.keygen.KeyGenerator;
 import org.apache.ibatis.executor.keygen.NoKeyGenerator;
@@ -37,21 +39,9 @@ import org.apache.ibatis.scripting.LanguageDriver;
 import org.apache.ibatis.session.Configuration;
 import org.apache.ibatis.session.SqlSessionFactory;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.core.config.DbConfig;
-import com.baomidou.mybatisplus.core.config.GlobalConfig;
-import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
-import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
-import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
-import com.baomidou.mybatisplus.core.metadata.TableInfo;
-import com.baomidou.mybatisplus.core.toolkit.sql.SqlHelper;
-import com.baomidou.mybatisplus.core.toolkit.support.LambdaCache;
-import com.baomidou.mybatisplus.core.toolkit.support.Property;
-import com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda;
+import java.lang.reflect.Field;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * <p>
@@ -83,7 +73,7 @@ public class TableInfoHelper {
      * @param <T>  被函数调用的类型,这个必须指定
      * @return 返回解析后的列名
      */
-    public static <T> String toColumn(Property<T, ?> func) {
+    public static <T> String toColumn(Property<T, ?> func) {//todo 只需要返回className以及methodName,放到lamWrapper里根据缓存取出columnName
         SerializedLambda lambda = LambdaUtils.resolve(func);
         // 使用 class 名称和方法名称作为缓存的键值
         String cacheKey = lambda.getImplClass() + lambda.getImplMethodName();
@@ -133,6 +123,7 @@ public class TableInfoHelper {
      * @param lambda 需要解析的 lambda
      * @return 返回解析后的class
      */
+    @Deprecated
     private static Class<?> resolveClass(SerializedLambda lambda) {
         String className = lambda.getImplClass().replace('/', '.');
         try {
@@ -289,7 +280,7 @@ public class TableInfoHelper {
          * 注入
          */
         TABLE_INFO_CACHE.put(clazz.getName(), tableInfo);
-        LambdaCache.put(clazz, tableInfo);
+        LambdaUtils.createCache(clazz.getName(), tableInfo);
         return tableInfo;
     }
 

+ 0 - 34
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/support/LambdaCache.java

@@ -1,34 +0,0 @@
-package com.baomidou.mybatisplus.core.toolkit.support;
-
-import com.baomidou.mybatisplus.core.metadata.TableInfo;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * @author ming
- * @Date 2018/5/12
- */
-public class LambdaCache {
-
-    private static final Map<String, Map<String, String>> LAMBDA_CACHE = new ConcurrentHashMap<>();
-
-    public static void put(Class clazz, TableInfo tableInfo) {
-        LAMBDA_CACHE.put(clazz.getName(), createLambdaMap(tableInfo));
-    }
-
-    private static Map<String, String> createLambdaMap(TableInfo tableInfo) {
-        Map<String, String> map = new HashMap<>();
-        if (StringUtils.isNotEmpty(tableInfo.getKeyProperty())) {
-            map.put(tableInfo.getKeyProperty(), tableInfo.getKeyColumn());
-        }
-        tableInfo.getFieldList().forEach(i -> map.put(i.getProperty(), i.getColumn()));
-        return map;
-    }
-
-    public static Map<String, String> getColumnMap(Class clazz) {
-        return LAMBDA_CACHE.get(clazz.getName());
-    }
-}