Browse Source

perf: `ktWrapper`加强泛型限制

miemie 2 năm trước cách đây
mục cha
commit
276ea9895d

+ 1 - 0
changelog-temp.md

@@ -3,3 +3,4 @@ fix: 在主键的`IdType`为`AUTO`的情况下,`Table#getAllInsertSqlColumnMaybe
 feat: `wrapper#apply`支持配置`mapping`比如`column={0,javaType=int,jdbcType=NUMERIC,typeHandler=xxx.xxx.MyTypeHandler}`
 fix: 租户插件支持`update set subSelect`的情况
 feat: `updateWrapper#setSql`方法支持`动态入参`参考`wrapper#apply`方法
+perf: `ktWrapper`加强泛型限制

+ 6 - 6
mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/AbstractKtWrapper.kt

@@ -20,7 +20,7 @@ import com.baomidou.mybatisplus.core.toolkit.LambdaUtils
 import com.baomidou.mybatisplus.core.toolkit.StringPool
 import com.baomidou.mybatisplus.core.toolkit.support.ColumnCache
 import java.util.stream.Collectors.joining
-import kotlin.reflect.KProperty
+import kotlin.reflect.KMutableProperty1
 
 /**
  * Lambda 语法使用 Wrapper
@@ -31,7 +31,7 @@ import kotlin.reflect.KProperty
  * @since 2018-11-07
  */
 @Suppress("serial")
-abstract class AbstractKtWrapper<T, Children : AbstractKtWrapper<T, Children>> : AbstractWrapper<T, KProperty<*>, Children>() {
+abstract class AbstractKtWrapper<T, Children : AbstractKtWrapper<T, Children>> : AbstractWrapper<T, KMutableProperty1<T, *>, Children>() {
 
     /**
      * 列 Map
@@ -41,12 +41,12 @@ abstract class AbstractKtWrapper<T, Children : AbstractKtWrapper<T, Children>> :
     /**
      * 重载方法,默认 onlyColumn = true
      */
-    override fun columnToString(kProperty: KProperty<*>): String? = columnToString(kProperty, true)
+    override fun columnToString(kProperty: KMutableProperty1<T, *>): String? = columnToString(kProperty, true)
 
     /**
      * 核心实现方法,供重载使用
      */
-    private fun columnToString(kProperty: KProperty<*>, onlyColumn: Boolean): String? {
+    private fun columnToString(kProperty: KMutableProperty1<T, *>, onlyColumn: Boolean): String? {
         return columnMap[LambdaUtils.formatKey(kProperty.name)]?.let { if (onlyColumn) it.column else it.columnSelect }
     }
 
@@ -55,7 +55,7 @@ abstract class AbstractKtWrapper<T, Children : AbstractKtWrapper<T, Children>> :
      *
      * "user_id" AS "userId" , "user_name" AS "userName"
      */
-    fun columnsToString(onlyColumn: Boolean, vararg columns: KProperty<*>): String =
+    fun columnsToString(onlyColumn: Boolean, vararg columns: KMutableProperty1<T, *>): String =
         columns.mapNotNull { columnToString(it, onlyColumn) }.joinToString(separator = StringPool.COMMA)
 
     /**
@@ -63,7 +63,7 @@ abstract class AbstractKtWrapper<T, Children : AbstractKtWrapper<T, Children>> :
      *
      * "user_id" AS "userId" , "user_name" AS "userName"
      */
-    fun columnsToString(onlyColumn: Boolean, columns: MutableList<KProperty<*>>): String =
+    fun columnsToString(onlyColumn: Boolean, columns: MutableList<KMutableProperty1<T, *>>): String =
         columns.stream().map { columnToString(it, onlyColumn) }.collect(joining(StringPool.COMMA));
 
     override fun initNeed() {

+ 4 - 5
mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtQueryChainWrapper.kt

@@ -21,7 +21,7 @@ import com.baomidou.mybatisplus.core.metadata.TableFieldInfo
 import com.baomidou.mybatisplus.extension.conditions.AbstractChainWrapper
 import com.baomidou.mybatisplus.extension.conditions.query.ChainQuery
 import java.util.function.Predicate
-import kotlin.reflect.KProperty
+import kotlin.reflect.KMutableProperty1
 
 /**
  * @author FlyInWind
@@ -30,8 +30,8 @@ import kotlin.reflect.KProperty
 @Suppress("serial")
 open class KtQueryChainWrapper<T : Any>(
     internal val baseMapper: BaseMapper<T>
-) : AbstractChainWrapper<T, KProperty<*>, KtQueryChainWrapper<T>, KtQueryWrapper<T>>(),
-    ChainQuery<T>, Query<KtQueryChainWrapper<T>, T, KProperty<*>> {
+) : AbstractChainWrapper<T, KMutableProperty1<T, *>, KtQueryChainWrapper<T>, KtQueryWrapper<T>>(),
+    ChainQuery<T>, Query<KtQueryChainWrapper<T>, T, KMutableProperty1<T, *>> {
 
     constructor(baseMapper: BaseMapper<T>, entityClass: Class<T>) : this(baseMapper) {
         super.wrapperChildren = KtQueryWrapper(entityClass)
@@ -41,7 +41,7 @@ open class KtQueryChainWrapper<T : Any>(
         super.wrapperChildren = KtQueryWrapper(entity)
     }
 
-    override fun select(condition: Boolean, columns: MutableList<KProperty<*>>): KtQueryChainWrapper<T> {
+    override fun select(condition: Boolean, columns: MutableList<KMutableProperty1<T, *>>): KtQueryChainWrapper<T> {
         wrapperChildren.select(condition, columns)
         return typedThis
     }
@@ -58,5 +58,4 @@ open class KtQueryChainWrapper<T : Any>(
     override fun getEntityClass(): Class<T> {
         return super.wrapperChildren.entityClass
     }
-
 }

+ 3 - 3
mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtQueryWrapper.kt

@@ -24,7 +24,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils
 import com.baomidou.mybatisplus.core.toolkit.support.ColumnCache
 import java.util.concurrent.atomic.AtomicInteger
 import java.util.function.Predicate
-import kotlin.reflect.KProperty
+import kotlin.reflect.KMutableProperty1
 
 /**
  * Kotlin Lambda 语法使用 Wrapper
@@ -33,7 +33,7 @@ import kotlin.reflect.KProperty
  * @since 2018-11-02
  */
 @Suppress("serial")
-open class KtQueryWrapper<T : Any> : AbstractKtWrapper<T, KtQueryWrapper<T>>, Query<KtQueryWrapper<T>, T, KProperty<*>> {
+open class KtQueryWrapper<T : Any> : AbstractKtWrapper<T, KtQueryWrapper<T>>, Query<KtQueryWrapper<T>, T, KMutableProperty1<T, *>> {
 
     /**
      * 查询字段
@@ -65,7 +65,7 @@ open class KtQueryWrapper<T : Any> : AbstractKtWrapper<T, KtQueryWrapper<T>>, Qu
         this.sqlFirst = sqlFirst
     }
 
-    override fun select(condition: Boolean, columns: MutableList<KProperty<*>>): KtQueryWrapper<T> {
+    override fun select(condition: Boolean, columns: MutableList<KMutableProperty1<T, *>>): KtQueryWrapper<T> {
         if (condition && CollectionUtils.isNotEmpty(columns)) {
             this.sqlSelect.stringValue = columnsToString(false, columns)
         }

+ 4 - 5
mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtUpdateChainWrapper.kt

@@ -19,7 +19,7 @@ import com.baomidou.mybatisplus.core.conditions.update.Update
 import com.baomidou.mybatisplus.core.mapper.BaseMapper
 import com.baomidou.mybatisplus.extension.conditions.AbstractChainWrapper
 import com.baomidou.mybatisplus.extension.conditions.update.ChainUpdate
-import kotlin.reflect.KProperty
+import kotlin.reflect.KMutableProperty1
 
 /**
  * @author FlyInWind
@@ -28,8 +28,8 @@ import kotlin.reflect.KProperty
 @Suppress("serial")
 open class KtUpdateChainWrapper<T : Any>(
     internal val baseMapper: BaseMapper<T>
-) : AbstractChainWrapper<T, KProperty<*>, KtUpdateChainWrapper<T>, KtUpdateWrapper<T>>(),
-    ChainUpdate<T>, Update<KtUpdateChainWrapper<T>, KProperty<*>> {
+) : AbstractChainWrapper<T, KMutableProperty1<T, *>, KtUpdateChainWrapper<T>, KtUpdateWrapper<T>>(),
+    ChainUpdate<T>, Update<KtUpdateChainWrapper<T>, KMutableProperty1<T, *>> {
 
     constructor(baseMapper: BaseMapper<T>, entityClass: Class<T>) : this(baseMapper) {
         super.wrapperChildren = KtUpdateWrapper(entityClass)
@@ -39,7 +39,7 @@ open class KtUpdateChainWrapper<T : Any>(
         super.wrapperChildren = KtUpdateWrapper(entity)
     }
 
-    override fun set(condition: Boolean, column: KProperty<*>, value: Any?, mapping: String?): KtUpdateChainWrapper<T> {
+    override fun set(condition: Boolean, column: KMutableProperty1<T, *>, value: Any?, mapping: String?): KtUpdateChainWrapper<T> {
         wrapperChildren.set(condition, column, value, mapping)
         return typedThis
     }
@@ -56,5 +56,4 @@ open class KtUpdateChainWrapper<T : Any>(
     override fun getEntityClass(): Class<T> {
         return super.wrapperChildren.entityClass
     }
-
 }

+ 3 - 3
mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtUpdateWrapper.kt

@@ -25,7 +25,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils
 import com.baomidou.mybatisplus.core.toolkit.support.ColumnCache
 import java.util.concurrent.atomic.AtomicInteger
 import java.util.stream.Collectors.joining
-import kotlin.reflect.KProperty
+import kotlin.reflect.KMutableProperty1
 
 /**
  * Kotlin Lambda 更新封装
@@ -34,7 +34,7 @@ import kotlin.reflect.KProperty
  * @since 2018-11-02
  */
 @Suppress("serial")
-open class KtUpdateWrapper<T : Any> : AbstractKtWrapper<T, KtUpdateWrapper<T>>, Update<KtUpdateWrapper<T>, KProperty<*>> {
+open class KtUpdateWrapper<T : Any> : AbstractKtWrapper<T, KtUpdateWrapper<T>>, Update<KtUpdateWrapper<T>, KMutableProperty1<T, *>> {
 
     /**
      * SQL 更新字段内容,例如:name='1', age=2
@@ -76,7 +76,7 @@ open class KtUpdateWrapper<T : Any> : AbstractKtWrapper<T, KtUpdateWrapper<T>>,
         return typedThis
     }
 
-    override fun set(condition: Boolean, column: KProperty<*>, value: Any?, mapping: String?): KtUpdateWrapper<T> {
+    override fun set(condition: Boolean, column: KMutableProperty1<T, *>, value: Any?, mapping: String?): KtUpdateWrapper<T> {
         return maybeDo(condition) {
             val sql = formatParam(mapping, value)
             sqlSet.add(columnsToString(column) + Constants.EQUALS + sql)