Browse Source

修复Kotlin使用select(predicate)方法错误.

https://github.com/baomidou/mybatis-plus/issues/6673
nieqiurong 3 months ago
parent
commit
11f177e405

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

@@ -55,6 +55,10 @@ open class KtQueryChainWrapper<T : Any>(
         return typedThis
     }
 
+    override fun select(predicate: Predicate<TableFieldInfo>): KtQueryChainWrapper<T> {
+        return select(entityClass, predicate)
+    }
+
     override fun select(entityClass: Class<T>, predicate: Predicate<TableFieldInfo>): KtQueryChainWrapper<T> {
         wrapperChildren.select(entityClass, predicate)
         return typedThis

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

@@ -72,6 +72,10 @@ open class KtQueryWrapper<T : Any> : AbstractKtWrapper<T, KtQueryWrapper<T>>, Qu
         return typedThis
     }
 
+    override fun select(predicate: Predicate<TableFieldInfo>): KtQueryWrapper<T> {
+        return select(entityClass, predicate) as KtQueryWrapper<T>
+    }
+
     override fun select(entityClass: Class<T>, predicate: Predicate<TableFieldInfo>): KtQueryWrapper<T> {
         this.entityClass = entityClass
         this.sqlSelect.stringValue = TableInfoHelper.getTableInfo(getEntityClass()).chooseSelect(predicate)

+ 11 - 0
mybatis-plus-spring/src/test/kotlin/com/baomidou/mybatisplus/test/kotlin/ChainWrappersTest.kt

@@ -1,6 +1,7 @@
 package com.baomidou.mybatisplus.test.kotlin
 
 import com.baomidou.mybatisplus.core.metadata.IPage
+import com.baomidou.mybatisplus.extension.kotlin.KtQueryWrapper
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page
 import com.baomidou.mybatisplus.extension.toolkit.ChainWrappers
 import com.baomidou.mybatisplus.extension.toolkit.Db
@@ -54,6 +55,16 @@ class ChainWrappersTest : BaseDbTest<UserMapper>() {
         );
     }
 
+    @Test
+    fun testSelectByPredicate() {
+        Assertions.assertDoesNotThrow { ChainWrappers.ktQueryChain(User::class.java).select({ true }).list() }
+        doTestAutoCommit(fun(m) {
+            Assertions.assertDoesNotThrow {
+                m.selectList(KtQueryWrapper(User()).select { true })
+            }
+        })
+    }
+
     override fun tableDataSql(): String {
         return "insert into `sys_user`(id,username,role_id) values(1,'gozei',1),(2,'chocolate',2),(3,'sheep',1)"
     }