Browse Source

思路=丝绸之路进化3

125473094@qq.com 7 years ago
parent
commit
2b445ae17c

+ 4 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/GlobalConfigUtils.java

@@ -4,6 +4,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
+import com.baomidou.mybatisplus.core.config.DbConfig;
 import org.apache.ibatis.logging.Log;
 import org.apache.ibatis.logging.LogFactory;
 import org.apache.ibatis.session.Configuration;
@@ -68,7 +69,9 @@ public class GlobalConfigUtils {
      * @return
      */
     public static GlobalConfig defaults() {
-        return new GlobalConfig();
+        GlobalConfig config = new GlobalConfig();
+        config.setDbConfig(new DbConfig());
+        return config;
     }
 
     /**

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

@@ -5,7 +5,7 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.WeakHashMap;
 
-import com.baomidou.mybatisplus.core.toolkit.support.SerializedFunction;
+import com.baomidou.mybatisplus.core.toolkit.support.Property;
 import com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda;
 
 /**
@@ -29,7 +29,7 @@ public final class LambdaUtils {
      * @param <T>  类型,被调用的 Function 对象的目标类型
      * @return 返回解析后的结果
      */
-    public static <T> SerializedLambda resolve(SerializedFunction<T, ?> func) {
+    public static <T> SerializedLambda resolve(Property<T, ?> func) {
         Class clazz = func.getClass();
         return Optional.ofNullable(CACHE.get(clazz))
             .map(WeakReference::get)

+ 2 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/TableInfoHelper.java

@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+import com.baomidou.mybatisplus.core.toolkit.support.LambdaCache;
 import org.apache.ibatis.builder.MapperBuilderAssistant;
 import org.apache.ibatis.executor.keygen.KeyGenerator;
 import org.apache.ibatis.executor.keygen.NoKeyGenerator;
@@ -200,6 +201,7 @@ public class TableInfoHelper {
          * 注入
          */
         TABLE_INFO_CACHE.put(clazz.getName(), tableInfo);
+        LambdaCache.put(clazz,tableInfo);
         return tableInfo;
     }
 

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

@@ -0,0 +1,34 @@
+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 String getColumn(Class clazz, String property) {
+        return LAMBDA_CACHE.get(clazz.getName()).get(property);
+    }
+}

+ 3 - 3
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/test/lambda1/Property.java → mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/support/Property.java

@@ -1,13 +1,13 @@
-package com.baomidou.mybatisplus.core.test.lambda1;
+package com.baomidou.mybatisplus.core.toolkit.support;
 
 import java.io.Serializable;
 
 /**
  * @author ming
- * @Date 2018/5/11
+ * @Date 2018/5/12
  */
 @FunctionalInterface
 public interface Property<T, R> extends Serializable {
 
-    R apply(T r);
+    R apply(T t);
 }

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

@@ -1,16 +0,0 @@
-package com.baomidou.mybatisplus.core.toolkit.support;
-
-import java.io.Serializable;
-import java.util.function.Function;
-
-/**
- * 主要是为了实现序列化接口
- * <p>
- *
- * @author HCL
- * @Date 2018/05/10
- */
-@FunctionalInterface
-public interface SerializedFunction<T, R> extends Function<T, R>, Serializable {
-
-}

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/support/SerializedLambda.java

@@ -41,7 +41,7 @@ public class SerializedLambda implements Serializable {
      * @param lambda lambda对象
      * @return 返回解析后的 SerializedLambda
      */
-    public static SerializedLambda convert(SerializedFunction lambda) {
+    public static SerializedLambda convert(Property lambda) {
         byte[] bytes = SerializationUtils.serialize(lambda);
         try (ObjectInputStream objIn = new ObjectInputStream(new ByteArrayInputStream(bytes)) {
             @Override

+ 3 - 3
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/test/LambdaTest/LambdaEntityWrapper.java

@@ -1,17 +1,17 @@
 package com.baomidou.mybatisplus.core.test.LambdaTest;
 
 import com.baomidou.mybatisplus.core.toolkit.LambdaUtils;
-import com.baomidou.mybatisplus.core.toolkit.support.SerializedFunction;
+import com.baomidou.mybatisplus.core.toolkit.support.Property;
 import com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda;
 
 /**
  * @author ming
  * @Date 2018/5/10
  */
-public class LambdaEntityWrapper<T> extends Wrappers<LambdaEntityWrapper<T>, SerializedFunction<T, ?>, T> {
+public class LambdaEntityWrapper<T> extends Wrappers<LambdaEntityWrapper<T>, Property<T, ?>, T> {
 
     @Override
-    String getColumn(SerializedFunction<T, ?> tFunction) {
+    String getColumn(Property<T, ?> tFunction) {
         //todo 能执行?
         SerializedLambda resolve = LambdaUtils.resolve(tFunction);
         return resolve.getImplMethodName();

+ 5 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/test/lambda1/JustDoIt.java

@@ -1,5 +1,8 @@
 package com.baomidou.mybatisplus.core.test.lambda1;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
 import lombok.Data;
 
 import java.util.List;
@@ -11,9 +14,10 @@ import java.util.List;
 public class JustDoIt {
 
     public static void main(String[] args) {
+        TableInfoHelper.initTableInfo(null, User.class);
         BaseMapper<User> mapper = new UserMapper();
         StrWrapper1<User> eq1 = new StrWrapper1<User>().eq("id", 1);
-        LambdaWrapper1<User> eq2 = new LambdaWrapper1<User>().eq(User::getName, 1).ne(User::getId,2);
+        LambdaWrapper1<User> eq2 = new LambdaWrapper1<>(User.class).eq(User::getName, 1).ne(User::getId, 2);
         mapper.selectList(eq2);
         mapper.selectList(eq1);
     }

+ 11 - 4
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/test/lambda1/LambdaWrapper1.java

@@ -2,20 +2,27 @@ package com.baomidou.mybatisplus.core.test.lambda1;
 
 import com.baomidou.mybatisplus.core.toolkit.LambdaUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.baomidou.mybatisplus.core.toolkit.support.SerializedFunction;
+import com.baomidou.mybatisplus.core.toolkit.support.LambdaCache;
+import com.baomidou.mybatisplus.core.toolkit.support.Property;
 import com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda;
 
 /**
  * @author ming
  * @Date 2018/5/11
  */
-public class LambdaWrapper1<T> extends AbstractWrapper1<LambdaWrapper1<T>, T,SerializedFunction<T, ?>> {
+public class LambdaWrapper1<T> extends AbstractWrapper1<LambdaWrapper1<T>, T, Property<T, ?>> {
+
+    private Class<T> clazz;
+
+    public LambdaWrapper1(Class<T> clazz) {
+        this.clazz = clazz;
+    }
 
     @Override
-    String getColumn(SerializedFunction<T, ?> tProperty) {
+    String getColumn(Property<T, ?> tProperty) {
         //todo 能执行?
         SerializedLambda resolve = LambdaUtils.resolve(tProperty);
-        return resolve.getImplMethodName();
+        return LambdaCache.getColumn(clazz, StringUtils.firstToLowerCase(resolve.getImplMethodName().substring(3)));
     }
 
     @Override