Browse Source

增加 kotlin lambda 支持

yangyuhan 6 years ago
parent
commit
58601ba1af

+ 0 - 1
build.gradle

@@ -42,7 +42,6 @@ ext {
     ]
 
     dependencies = [
-        "commons-collections"               : "commons-collections:commons-collections:3.2.2",
         "kotlin-reflect"                    : "org.jetbrains.kotlin:kotlin-reflect:1.2.71",
         "jsqlparser"                        : "com.github.jsqlparser:jsqlparser:${jsqlparserVersion}",
         "mybatis-spring"                    : "org.mybatis:mybatis-spring:${mybatisSpringVersion}",

+ 0 - 5
mybatis-plus-core/build.gradle

@@ -1,6 +1,3 @@
-plugins {
-    id "org.jetbrains.kotlin.jvm"
-}
 apply plugin: 'java'
 
 sourceCompatibility = 1.8
@@ -10,8 +7,6 @@ dependencies {
     compile rootProject.ext.dependencies["mybatis"]
     compile rootProject.ext.dependencies["jsqlparser"]
     compile rootProject.ext.dependencies["mybatis-spring"]
-    compile rootProject.ext.dependencies["kotlin-reflect"]
-    compile rootProject.ext.dependencies["commons-collections"]
 
     provided rootProject.ext.dependencies["cglib"]
     provided rootProject.ext.dependencies["spring-aop"]

+ 1 - 12
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/query/QueryWrapper.java

@@ -31,7 +31,7 @@ import java.util.function.Predicate;
  * Entity 对象封装操作类
  * </p>
  *
- * @author hubin miemie HCL yyh
+ * @author hubin miemie HCL
  * @since 2018-05-25
  */
 @SuppressWarnings("serial")
@@ -112,17 +112,6 @@ public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
         return new LambdaQueryWrapper<>(entity, entityClass, sqlSelect, paramNameSeq, paramNameValuePairs, expression);
     }
 
-
-    /**
-     * <p>
-     * 返回一个支持 Kotlin lambda 函数写法的 wrapper
-     * </p>
-     */
-    public LambdaQueryWrapperkt<T> lambdaKt() {
-        return new LambdaQueryWrapperkt<>(entity, entityClass, sqlSelect, paramNameSeq, paramNameValuePairs, expression);
-    }
-
-
     @Override
     public String getSqlSelect() {
         return sqlSelect;

+ 1 - 11
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/UpdateWrapper.java

@@ -30,7 +30,7 @@ import java.util.concurrent.atomic.AtomicInteger;
  * Update 条件封装
  * </p>
  *
- * @author hubin miemie HCL yyh
+ * @author hubin miemie HCL
  * @since 2018-05-30
  */
 @SuppressWarnings("serial")
@@ -70,16 +70,6 @@ public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T
         return new LambdaUpdateWrapper<>(entity, sqlSet, paramNameSeq, paramNameValuePairs, expression);
     }
 
-
-    /**
-     * <p>
-     * 返回一个支持 kotlin  lambda 函数写法的 wrapper
-     * </p>
-     */
-    public LambdaUpdateWrapperKt<T> lambdaKt() {
-        return new LambdaUpdateWrapperKt<>(entity, paramNameSeq, paramNameValuePairs, expression);
-    }
-
     @Override
     public String getSqlSet() {
         if (CollectionUtils.isEmpty(sqlSet)) {

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

@@ -73,9 +73,7 @@ public final class LambdaUtils {
      * @param tableInfo 表信息
      */
     public static void createCache(Class clazz, TableInfo tableInfo) {
-        Map<String, String> lambdaMap = createLambdaMap(tableInfo, clazz);
-        LAMBDA_CACHE.put(clazz.getName(), lambdaMap);
-        LambdaUtilsKt.createCatch(clazz,lambdaMap);
+        LAMBDA_CACHE.put(clazz.getName(), createLambdaMap(tableInfo, clazz));
     }
 
     /**

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

@@ -1,16 +0,0 @@
-package com.baomidou.mybatisplus.core.toolkit
-
-import org.apache.commons.collections.MapUtils
-import java.util.concurrent.ConcurrentHashMap
-import kotlin.reflect.KProperty
-import kotlin.reflect.full.memberProperties
-
-val LAMBDA_KT_CACHE = ConcurrentHashMap<KProperty<*>, String>()
-
-
-fun createCatch(clazz: Class<*>, source: Map<String, String>)  {
-    for (memberProperty in clazz.kotlin.memberProperties) {
-        LAMBDA_KT_CACHE[memberProperty]= MapUtils.getString(source, memberProperty.name)
-    }
-}
-

+ 6 - 0
mybatis-plus-extension/build.gradle

@@ -1,3 +1,6 @@
+plugins {
+    id "org.jetbrains.kotlin.jvm"
+}
 apply plugin: 'java'
 
 sourceCompatibility = 1.8
@@ -6,12 +9,15 @@ dependencies {
     compile project(":mybatis-plus-core")
     compile rootProject.ext.dependencies["mybatis-spring"]
     compile rootProject.ext.dependencies["mybatis"]
+    compile rootProject.ext.dependencies["kotlin-reflect"]
 
     provided rootProject.ext.dependencies["spring-context-support"]
     provided rootProject.ext.dependencies["spring-jdbc"]
     provided rootProject.ext.dependencies["javax.servlet-api"]
     provided rootProject.ext.dependencies["slf4j-api"]
 
+
+
     testCompile rootProject.ext.dependencies["spring-web"]
     testCompile rootProject.ext.dependencies["javax.servlet-api"]
     testCompile rootProject.ext.dependencies["spring-test"]

+ 10 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractLambdaWrapperKt.kt → mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/kotlin/AbstractLambdaWrapperKt.kt

@@ -13,9 +13,10 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.baomidou.mybatisplus.core.conditions
+package com.baomidou.mybatisplus.extension.kotlin
 
-import com.baomidou.mybatisplus.core.toolkit.LAMBDA_KT_CACHE
+import com.baomidou.mybatisplus.core.conditions.AbstractWrapper
+import com.baomidou.mybatisplus.core.toolkit.LambdaUtils
 import kotlin.reflect.KProperty
 
 /**
@@ -30,9 +31,14 @@ import kotlin.reflect.KProperty
  */
 abstract class AbstractLambdaWrapperKt<T, This : AbstractLambdaWrapperKt<T, This>> : AbstractWrapper<T, KProperty<*>, This>() {
 
+    private var columnMap: Map<String, String>? = null
 
-    override fun columnToString(kProperty: KProperty<*>): String {
-      return  LAMBDA_KT_CACHE[kProperty]!!
+
+    override fun columnToString(kProperty: KProperty<*>): String? {
+        if (columnMap == null) {
+            columnMap = LambdaUtils.getColumnMap(this.entityClass.name)
+        }
+        return columnMap?.get(kProperty.name)
     }
 
 }

+ 9 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/query/LambdaQueryWrapperkt.kt → mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/kotlin/LambdaQueryWrapperkt.kt

@@ -13,9 +13,8 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.baomidou.mybatisplus.core.conditions.query
+package com.baomidou.mybatisplus.extension.kotlin
 
-import com.baomidou.mybatisplus.core.conditions.AbstractLambdaWrapperKt
 import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments
 import com.baomidou.mybatisplus.core.metadata.TableFieldInfo
 import com.baomidou.mybatisplus.core.toolkit.ArrayUtils
@@ -33,14 +32,15 @@ import kotlin.reflect.KProperty
  * @author yangyuhan
  * @since 2018-11-02
  */
-class LambdaQueryWrapperkt<T> : AbstractLambdaWrapperKt<T, LambdaQueryWrapperkt<T>> {
+class LambdaQueryWrapperkt<T : Any> : AbstractLambdaWrapperKt<T, LambdaQueryWrapperkt<T>> {
 
     /**
      * 查询字段
      */
     private var sqlSelect: String? = null
 
-    @JvmOverloads constructor(entity: T? = null) {
+
+    constructor(entity: T) {
         this.entity = entity
         this.initEntityClass()
         this.initNeed()
@@ -113,4 +113,9 @@ class LambdaQueryWrapperkt<T> : AbstractLambdaWrapperKt<T, LambdaQueryWrapperkt<
     override fun instance(paramNameSeq: AtomicInteger, paramNameValuePairs: Map<String, Any>): LambdaQueryWrapperkt<T> {
         return LambdaQueryWrapperkt(entity, entityClass, null, paramNameSeq, paramNameValuePairs, MergeSegments())
     }
+
+
+
+
 }
+

+ 13 - 5
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/LambdaUpdateWrapperKt.kt → mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/kotlin/LambdaUpdateWrapperKt.kt

@@ -13,9 +13,8 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.baomidou.mybatisplus.core.conditions.update
+package com.baomidou.mybatisplus.extension.kotlin
 
-import com.baomidou.mybatisplus.core.conditions.AbstractLambdaWrapperKt
 import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils
 import com.baomidou.mybatisplus.core.toolkit.StringPool
@@ -34,19 +33,28 @@ import kotlin.reflect.KProperty
  * @author yangyuhan
  * @since 2018-11-02
  */
-class LambdaUpdateWrapperKt<T> internal constructor(entity: T, paramNameSeq: AtomicInteger, paramNameValuePairs: Map<String, Any>,
-                                                    mergeSegments: MergeSegments) : AbstractLambdaWrapperKt<T, LambdaUpdateWrapperKt<T>>() {
+class LambdaUpdateWrapperKt<T:Any>: AbstractLambdaWrapperKt<T, LambdaUpdateWrapperKt<T>>   {
 
     /**
      * SQL 更新字段内容,例如:name='1',age=2
      */
     private val sqlSet = ArrayList<String>()
 
-    init {
+
+    constructor(entity: T) {
+        this.entity = entity
+        this.initEntityClass()
+        this.initNeed()
+    }
+
+
+    constructor(entity: T, paramNameSeq: AtomicInteger, paramNameValuePairs: Map<String, Any>,
+                mergeSegments: MergeSegments) {
         this.entity = entity
         this.paramNameSeq = paramNameSeq
         this.paramNameValuePairs = paramNameValuePairs
         this.expression = mergeSegments
+
     }
 
     override fun getSqlSet(): String? {