Bläddra i källkod

1. Db.ktQuery();
2. Db.ktUpdate();
3. Wrappers.ktQuery();
4. Wrappers.ktUpdate();
5. KtQueryChainWrapper将BaseMapper参数改为可选的
6. 相关的单元测试
7. 相关的中文注释完善

Gozei 1 år sedan
förälder
incheckning
95de0297da

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

@@ -16,6 +16,7 @@ dependencies {
     implementation "${lib['mybatis-thymeleaf']}"
     implementation "${lib.'mybatis-velocity'}"
     implementation "${lib.'mybatis-freemarker'}"
+    testImplementation "${lib.h2}"
     testImplementation "com.github.pagehelper:pagehelper:5.3.1"
     testImplementation "com.google.guava:guava:31.1-jre"
 }

+ 24 - 0
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/ChainWrappers.java

@@ -103,6 +103,18 @@ public final class ChainWrappers {
         return new KtQueryChainWrapper<>(mapper, entity);
     }
 
+    /**
+     * 链式查询 lambda 式
+     * 仅支持 Kotlin
+     * 仅传 entityClass 实体类
+     *
+     * @return KtQueryWrapper 的包装类
+     */
+    public static <T> KtQueryChainWrapper<T> ktQueryChain(Class<T> entityClass) {
+        return new KtQueryChainWrapper<>(entityClass);
+    }
+
+
     /**
      * 链式更改 普通
      *
@@ -140,6 +152,18 @@ public final class ChainWrappers {
         return new KtUpdateChainWrapper<>(mapper, entityClass);
     }
 
+    /**
+     * 链式更改 lambda 式
+     * 仅支持 Kotlin
+     * 仅传 entityClass 实体类
+     *
+     * @return KtUpdateWrapper 的包装类
+     */
+    public static <T> KtUpdateChainWrapper<T> ktUpdateChain(Class<T> entityClass) {
+        return new KtUpdateChainWrapper<>(entityClass);
+    }
+
+
     /**
      * 链式更改 lambda 式
      * 仅支持 Kotlin

+ 29 - 19
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/Db.java

@@ -15,36 +15,27 @@
  */
 package com.baomidou.mybatisplus.extension.toolkit;
 
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
-import org.apache.ibatis.binding.MapperMethod;
-import org.apache.ibatis.logging.Log;
-import org.apache.ibatis.logging.LogFactory;
-
 import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
 import com.baomidou.mybatisplus.core.enums.SqlMethod;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
-import com.baomidou.mybatisplus.core.toolkit.Assert;
-import com.baomidou.mybatisplus.core.toolkit.ClassUtils;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.Constants;
-import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.core.toolkit.*;
 import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
 import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.conditions.update.UpdateChainWrapper;
+import com.baomidou.mybatisplus.extension.kotlin.KtQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.kotlin.KtUpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.apache.ibatis.binding.MapperMethod;
+import org.apache.ibatis.logging.Log;
+import org.apache.ibatis.logging.LogFactory;
+
+import java.io.Serializable;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 以静态方式调用Service中的函数
@@ -525,6 +516,16 @@ public class Db {
         return ChainWrappers.queryChain(entityClass);
     }
 
+    /**
+     * kt链式查询
+     *
+     * @return KtQueryWrapper 的包装类
+     */
+    public static <T> KtQueryChainWrapper<T> ktQuery(Class<T> entityClass) {
+        return ChainWrappers.ktQueryChain(entityClass);
+    }
+
+
     /**
      * 链式查询 lambda 式
      * <p>注意:不支持 Kotlin </p>
@@ -544,6 +545,15 @@ public class Db {
         return ChainWrappers.updateChain(entityClass);
     }
 
+    /**
+     * kt链式更改
+     *
+     * @return KtUpdateWrapper 的包装类
+     */
+    public static <T> KtUpdateChainWrapper<T> ktUpdate(Class<T> entityClass) {
+        return ChainWrappers.ktUpdateChain(entityClass);
+    }
+
     /**
      * 链式更改 lambda 式
      * <p>注意:不支持 Kotlin </p>

+ 11 - 2
mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtQueryChainWrapper.kt

@@ -28,7 +28,7 @@ import kotlin.reflect.KProperty
  * @since 2020-10-18
  */
 open class KtQueryChainWrapper<T : Any>(
-    internal val baseMapper: BaseMapper<T>
+    internal val baseMapper: BaseMapper<T>?
 ) : AbstractChainWrapper<T, KProperty<*>, KtQueryChainWrapper<T>, KtQueryWrapper<T>>(),
     ChainQuery<T>, Query<KtQueryChainWrapper<T>, T, KProperty<*>> {
 
@@ -41,6 +41,15 @@ open class KtQueryChainWrapper<T : Any>(
         super.wrapperChildren = KtQueryWrapper(entity)
     }
 
+    constructor(entityClass: Class<T>) : this(null) {
+        super.wrapperChildren = KtQueryWrapper(entityClass)
+    }
+
+    constructor(entity: T) : this(null) {
+        super.wrapperChildren = KtQueryWrapper(entity)
+        super.setEntityClass(entity.javaClass)
+    }
+
     override fun select(condition: Boolean, columns: MutableList<KProperty<*>>): KtQueryChainWrapper<T> {
         wrapperChildren.select(condition, columns)
         return typedThis
@@ -51,7 +60,7 @@ open class KtQueryChainWrapper<T : Any>(
         return typedThis
     }
 
-    override fun getBaseMapper(): BaseMapper<T> {
+    override fun getBaseMapper(): BaseMapper<T>? {
         return baseMapper
     }
 

+ 11 - 2
mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtUpdateChainWrapper.kt

@@ -26,7 +26,7 @@ import kotlin.reflect.KProperty
  * @since 2020-10-18
  */
 open class KtUpdateChainWrapper<T : Any>(
-    internal val baseMapper: BaseMapper<T>
+    internal val baseMapper: BaseMapper<T>?
 ) : AbstractChainWrapper<T, KProperty<*>, KtUpdateChainWrapper<T>, KtUpdateWrapper<T>>(),
     ChainUpdate<T>, Update<KtUpdateChainWrapper<T>, KProperty<*>> {
 
@@ -39,6 +39,15 @@ open class KtUpdateChainWrapper<T : Any>(
         super.wrapperChildren = KtUpdateWrapper(entity)
     }
 
+    constructor(entityClass: Class<T>) : this(null) {
+        super.wrapperChildren = KtUpdateWrapper(entityClass)
+    }
+
+    constructor(entity: T) : this(null) {
+        super.wrapperChildren = KtUpdateWrapper(entity)
+        super.setEntityClass(entity.javaClass)
+    }
+
     override fun set(condition: Boolean, column: KProperty<*>, value: Any?, mapping: String?): KtUpdateChainWrapper<T> {
         wrapperChildren.set(condition, column, value, mapping)
         return typedThis
@@ -49,7 +58,7 @@ open class KtUpdateChainWrapper<T : Any>(
         return typedThis
     }
 
-    override fun getBaseMapper(): BaseMapper<T> {
+    override fun getBaseMapper(): BaseMapper<T>? {
         return baseMapper
     }
 

+ 6 - 11
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/toolkit/DbTest.java

@@ -1,16 +1,5 @@
 package com.baomidou.mybatisplus.test.toolkit;
 
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.ibatis.exceptions.TooManyResultsException;
-import org.apache.ibatis.plugin.Interceptor;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -26,6 +15,12 @@ import com.baomidou.mybatisplus.extension.toolkit.Db;
 import com.baomidou.mybatisplus.test.BaseDbTest;
 import com.baomidou.mybatisplus.test.sqlrunner.Entity;
 import com.baomidou.mybatisplus.test.sqlrunner.EntityMapper;
+import org.apache.ibatis.exceptions.TooManyResultsException;
+import org.apache.ibatis.plugin.Interceptor;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.*;
 
 /**
  * 以静态方式调用Service中的函数