From 95de0297da62f6990c3f92a69e6ca60c1aa5d9a3 Mon Sep 17 00:00:00 2001 From: Gozei <2374280167@qq.com> Date: Sun, 27 Aug 2023 20:29:13 +0800 Subject: [PATCH 1/3] =?UTF-8?q?1.=20Db.ktQuery();=202.=20Db.ktUpdate();=20?= =?UTF-8?q?3.=20Wrappers.ktQuery();=204.=20Wrappers.ktUpdate();=205.=20KtQ?= =?UTF-8?q?ueryChainWrapper=E5=B0=86BaseMapper=E5=8F=82=E6=95=B0=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=8F=AF=E9=80=89=E7=9A=84=206.=20=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=9A=84=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95=207.=20=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84=E4=B8=AD=E6=96=87=E6=B3=A8=E9=87=8A=E5=AE=8C?= =?UTF-8?q?=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mybatis-plus-extension/build.gradle | 1 + .../extension/toolkit/ChainWrappers.java | 24 ++++++++++ .../mybatisplus/extension/toolkit/Db.java | 48 +++++++++++-------- .../extension/kotlin/KtQueryChainWrapper.kt | 13 ++++- .../extension/kotlin/KtUpdateChainWrapper.kt | 13 ++++- .../mybatisplus/test/toolkit/DbTest.java | 17 +++---- 6 files changed, 82 insertions(+), 34 deletions(-) diff --git a/mybatis-plus-extension/build.gradle b/mybatis-plus-extension/build.gradle index d8ab27101..e504ba27c 100644 --- a/mybatis-plus-extension/build.gradle +++ b/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" } diff --git a/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/ChainWrappers.java b/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/ChainWrappers.java index 646192793..3fb985349 100644 --- a/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/ChainWrappers.java +++ b/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 KtQueryChainWrapper ktQueryChain(Class 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 KtUpdateChainWrapper ktUpdateChain(Class entityClass) { + return new KtUpdateChainWrapper<>(entityClass); + } + + /** * 链式更改 lambda 式 * 仅支持 Kotlin diff --git a/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/Db.java b/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/Db.java index 9ab3c2894..df0a177eb 100644 --- a/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/Db.java +++ b/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 KtQueryChainWrapper ktQuery(Class entityClass) { + return ChainWrappers.ktQueryChain(entityClass); + } + + /** * 链式查询 lambda 式 *

注意:不支持 Kotlin

@@ -544,6 +545,15 @@ public class Db { return ChainWrappers.updateChain(entityClass); } + /** + * kt链式更改 + * + * @return KtUpdateWrapper 的包装类 + */ + public static KtUpdateChainWrapper ktUpdate(Class entityClass) { + return ChainWrappers.ktUpdateChain(entityClass); + } + /** * 链式更改 lambda 式 *

注意:不支持 Kotlin

diff --git a/mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtQueryChainWrapper.kt b/mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtQueryChainWrapper.kt index de177968e..7c3034b7c 100644 --- a/mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtQueryChainWrapper.kt +++ b/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( - internal val baseMapper: BaseMapper + internal val baseMapper: BaseMapper? ) : AbstractChainWrapper, KtQueryChainWrapper, KtQueryWrapper>(), ChainQuery, Query, T, KProperty<*>> { @@ -41,6 +41,15 @@ open class KtQueryChainWrapper( super.wrapperChildren = KtQueryWrapper(entity) } + constructor(entityClass: Class) : 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>): KtQueryChainWrapper { wrapperChildren.select(condition, columns) return typedThis @@ -51,7 +60,7 @@ open class KtQueryChainWrapper( return typedThis } - override fun getBaseMapper(): BaseMapper { + override fun getBaseMapper(): BaseMapper? { return baseMapper } diff --git a/mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtUpdateChainWrapper.kt b/mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtUpdateChainWrapper.kt index c17d148b3..24f7ce894 100644 --- a/mybatis-plus-extension/src/main/kotlin/com/baomidou/mybatisplus/extension/kotlin/KtUpdateChainWrapper.kt +++ b/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( - internal val baseMapper: BaseMapper + internal val baseMapper: BaseMapper? ) : AbstractChainWrapper, KtUpdateChainWrapper, KtUpdateWrapper>(), ChainUpdate, Update, KProperty<*>> { @@ -39,6 +39,15 @@ open class KtUpdateChainWrapper( super.wrapperChildren = KtUpdateWrapper(entity) } + constructor(entityClass: Class) : 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 { wrapperChildren.set(condition, column, value, mapping) return typedThis @@ -49,7 +58,7 @@ open class KtUpdateChainWrapper( return typedThis } - override fun getBaseMapper(): BaseMapper { + override fun getBaseMapper(): BaseMapper? { return baseMapper } diff --git a/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/toolkit/DbTest.java b/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/toolkit/DbTest.java index 82e678c02..b9af1c3d4 100644 --- a/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/toolkit/DbTest.java +++ b/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中的函数 -- Gitee From d81a491e450a556d9ab85b485cc800173f4bca65 Mon Sep 17 00:00:00 2001 From: Gozei <2374280167@qq.com> Date: Sun, 27 Aug 2023 20:40:59 +0800 Subject: [PATCH 2/3] =?UTF-8?q?1.=20Db.ktQuery();=202.=20Db.ktUpdate();=20?= =?UTF-8?q?3.=20Wrappers.ktQuery();=204.=20Wrappers.ktUpdate();=205.=20KtQ?= =?UTF-8?q?ueryChainWrapper=E5=B0=86BaseMapper=E5=8F=82=E6=95=B0=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=8F=AF=E9=80=89=E7=9A=84=206.=20=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=9A=84=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95=207.=20=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84=E4=B8=AD=E6=96=87=E6=B3=A8=E9=87=8A=E5=AE=8C?= =?UTF-8?q?=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mybatis-plus-extension/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/mybatis-plus-extension/build.gradle b/mybatis-plus-extension/build.gradle index 5bb2cd014..4120102ed 100644 --- a/mybatis-plus-extension/build.gradle +++ b/mybatis-plus-extension/build.gradle @@ -21,4 +21,5 @@ dependencies { testImplementation "com.github.pagehelper:pagehelper:5.3.1" testImplementation "com.google.guava:guava:31.1-jre" testImplementation "io.github.classgraph:classgraph:+" + testImplementation "${lib.h2}" } -- Gitee From 73eeb45e511174db8bff2dd16b86780440017a0e Mon Sep 17 00:00:00 2001 From: Gozei <2374280167@qq.com> Date: Sun, 27 Aug 2023 20:41:13 +0800 Subject: [PATCH 3/3] =?UTF-8?q?1.=20Db.ktQuery();=202.=20Db.ktUpdate();=20?= =?UTF-8?q?3.=20Wrappers.ktQuery();=204.=20Wrappers.ktUpdate();=205.=20KtQ?= =?UTF-8?q?ueryChainWrapper=E5=B0=86BaseMapper=E5=8F=82=E6=95=B0=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=8F=AF=E9=80=89=E7=9A=84=206.=20=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=9A=84=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95=207.=20=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84=E4=B8=AD=E6=96=87=E6=B3=A8=E9=87=8A=E5=AE=8C?= =?UTF-8?q?=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatisplus/test/kotlin/BaseDbTest.kt | 151 ++++++++++++++++++ .../test/kotlin/ChainWrappersTest.kt | 54 +++++++ .../mybatisplus/test/kotlin/DbTest.kt | 63 ++++++++ .../mybatisplus/test/kotlin/UserMapper.kt | 5 + 4 files changed, 273 insertions(+) create mode 100644 mybatis-plus-extension/src/test/kotlin/com/baomidou/mybatisplus/test/kotlin/BaseDbTest.kt create mode 100644 mybatis-plus-extension/src/test/kotlin/com/baomidou/mybatisplus/test/kotlin/ChainWrappersTest.kt create mode 100644 mybatis-plus-extension/src/test/kotlin/com/baomidou/mybatisplus/test/kotlin/DbTest.kt create mode 100644 mybatis-plus-extension/src/test/kotlin/com/baomidou/mybatisplus/test/kotlin/UserMapper.kt diff --git a/mybatis-plus-extension/src/test/kotlin/com/baomidou/mybatisplus/test/kotlin/BaseDbTest.kt b/mybatis-plus-extension/src/test/kotlin/com/baomidou/mybatisplus/test/kotlin/BaseDbTest.kt new file mode 100644 index 000000000..727be60b7 --- /dev/null +++ b/mybatis-plus-extension/src/test/kotlin/com/baomidou/mybatisplus/test/kotlin/BaseDbTest.kt @@ -0,0 +1,151 @@ +package com.baomidou.mybatisplus.test.kotlin + +import com.baomidou.mybatisplus.core.MybatisConfiguration +import com.baomidou.mybatisplus.core.MybatisSqlSessionFactoryBuilder +import com.baomidou.mybatisplus.core.config.GlobalConfig +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils +import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils +import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils +import com.baomidou.mybatisplus.core.toolkit.StringUtils +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner +import org.apache.ibatis.builder.xml.XMLMapperBuilder +import org.apache.ibatis.io.Resources +import org.apache.ibatis.logging.slf4j.Slf4jImpl +import org.apache.ibatis.mapping.Environment +import org.apache.ibatis.plugin.Interceptor +import org.apache.ibatis.session.Configuration +import org.apache.ibatis.session.ExecutorType +import org.apache.ibatis.session.SqlSession +import org.apache.ibatis.session.SqlSessionFactory +import org.apache.ibatis.transaction.managed.ManagedTransactionFactory +import org.apache.ibatis.type.TypeReference +import org.h2.Driver +import org.springframework.jdbc.core.JdbcTemplate +import org.springframework.jdbc.datasource.SimpleDriverDataSource +import java.io.IOException +import java.util.function.Consumer +import javax.sql.DataSource + +/** + * @author miemie + * @since 2020-06-23 + */ +abstract class BaseDbTest : TypeReference() { + protected var sqlSessionFactory: SqlSessionFactory + protected var mapper: Class + protected var jdbcTemplate: JdbcTemplate + + init { + SqlRunner.DEFAULT.close() + val ds = dataSource() + val tableSql = tableSql() + val tableDataSql = tableDataSql() + val mapperXml = mapperXml() + val globalConfig = globalConfig() + val interceptors = interceptors() + val consumer = consumer() + mapper = rawType as Class + jdbcTemplate = JdbcTemplate(ds) + if (CollectionUtils.isNotEmpty(tableSql)) { + for (sql in tableSql!!) { + if (StringUtils.isNotBlank(sql)) { + jdbcTemplate.execute(sql) + } + } + } + if (StringUtils.isNotBlank(tableDataSql)) { + jdbcTemplate.execute(tableDataSql) + } + val builder = MybatisSqlSessionFactoryBuilder() + val environment = Environment("test", ManagedTransactionFactory(), ds) + val configuration = MybatisConfiguration(environment) + consumer?.accept(configuration) + GlobalConfigUtils.setGlobalConfig(configuration, globalConfig) + configuration.logImpl = Slf4jImpl::class.java + if (StringUtils.isNotBlank(mapperXml)) { + try { + val inputStream = Resources.getResourceAsStream(mapperXml) + val xmlMapperBuilder = XMLMapperBuilder( + inputStream, + configuration, mapperXml, configuration.sqlFragments + ) + xmlMapperBuilder.parse() + } catch (e: IOException) { + throw ExceptionUtils.mpe(e) + } + } + configuration.addMapper(mapper) + otherMapper().forEach(Consumer { type: Class<*>? -> configuration.addMapper(type) }) + if (CollectionUtils.isNotEmpty(interceptors)) { + interceptors!!.forEach(Consumer { interceptor: Interceptor? -> configuration.addInterceptor(interceptor) }) + } + sqlSessionFactory = builder.build(configuration) + } + + private fun dataSource(): DataSource { + val dataSource = SimpleDriverDataSource() + dataSource.driver = Driver() + dataSource.url = "jdbc:h2:mem:test;MODE=mysql;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE" + dataSource.username = "sa" + dataSource.password = "" + return dataSource + } + + protected fun sqlSession(type: ExecutorType?): SqlSession { + return sqlSessionFactory.openSession(type) + } + + protected fun doTest(consumer: Consumer) { + sqlSession(null).use { sqlSession -> doTest(sqlSession, consumer) } + } + + protected fun doTestAutoCommit(consumer: Consumer) { + sqlSession(null).use { sqlSession -> doTestAutoCommit(sqlSession, consumer) } + } + + protected fun doTest(sqlSession: SqlSession, consumer: Consumer) { + doMapper(sqlSession, false, consumer) + } + + protected fun doTestAutoCommit(sqlSession: SqlSession, consumer: Consumer) { + doMapper(sqlSession, true, consumer) + } + + protected fun doMapper(sqlSession: SqlSession, commit: Boolean, consumer: Consumer) { + val t = sqlSession.getMapper(mapper) + consumer.accept(t) + if (commit) { + sqlSession.commit() + } else { + sqlSession.rollback() + } + } + + protected open fun tableSql(): List? { + return null + } + + protected open fun tableDataSql(): String? { + return null + } + + protected fun mapperXml(): String? { + return null + } + + protected fun interceptors(): List? { + return null + } + + protected fun globalConfig(): GlobalConfig { + return GlobalConfigUtils.defaults() + } + + protected fun consumer(): Consumer? { + return null + } + + protected fun otherMapper(): List> { + return emptyList() + } +} diff --git a/mybatis-plus-extension/src/test/kotlin/com/baomidou/mybatisplus/test/kotlin/ChainWrappersTest.kt b/mybatis-plus-extension/src/test/kotlin/com/baomidou/mybatisplus/test/kotlin/ChainWrappersTest.kt new file mode 100644 index 000000000..27f461e44 --- /dev/null +++ b/mybatis-plus-extension/src/test/kotlin/com/baomidou/mybatisplus/test/kotlin/ChainWrappersTest.kt @@ -0,0 +1,54 @@ +package com.baomidou.mybatisplus.test.kotlin + +import com.baomidou.mybatisplus.core.metadata.IPage +import com.baomidou.mybatisplus.extension.plugins.pagination.Page +import com.baomidou.mybatisplus.extension.toolkit.ChainWrappers +import com.baomidou.mybatisplus.extension.toolkit.Db +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Test +import java.util.* + +class ChainWrappersTest : BaseDbTest() { + + @Test + fun testQueryChain() { + val list = ChainWrappers.ktQueryChain(User::class.java).eq(User::id, 1).list() + Assertions.assertEquals(1, list.size) + val listRid = ChainWrappers.ktQueryChain(User::class.java).eq(User::roleId, 1).list() + Assertions.assertEquals(2, listRid.size) + val oneUser = ChainWrappers.ktQueryChain(User::class.java).eq(User::id, 1).one() + Assertions.assertEquals("gozei", oneUser.name) + val count = ChainWrappers.ktQueryChain(User::class.java).eq(User::id, 1).count() + Assertions.assertEquals(1, count) + val exists = ChainWrappers.ktQueryChain(User::class.java).eq(User::id, 1).exists() + Assertions.assertEquals(true, exists) + val oneIdName = ChainWrappers.ktQueryChain(User::class.java).eq(User::id, 1).eq(User::name, "gozei").one() + Assertions.assertEquals(1, oneIdName.roleId) + val page: IPage = Db.page(Page(1, 3), User::class.java) + val pageU = ChainWrappers.ktQueryChain(User::class.java).page(page) + Assertions.assertEquals(3, pageU.size) + } + + @Test + fun testUpdate() { + ChainWrappers.ktUpdateChain(User::class.java).eq(User::id, 3).set(User::name, "haku").update() + Assertions.assertEquals("haku", Db.ktQuery(User::class.java).eq(User::id, 3).one().name) + ChainWrappers.ktUpdateChain(User::class.java).eq(User::id, 2).set(User::name, "haku").set(User::roleId, 4) + .update() + Assertions.assertEquals(4, Db.ktQuery(User::class.java).eq(User::id, 2).one().roleId) + } + + override fun tableDataSql(): String { + return "insert into `sys_user`(id,username,role_id) values(1,'gozei',1),(2,'chocolate',2),(3,'sheep',1)" + } + + override fun tableSql(): List? { + return Arrays.asList( + "drop table if exists `sys_user`", "CREATE TABLE IF NOT EXISTS `sys_user` (" + + "id INT NOT NULL," + + "username VARCHAR(30) NULL DEFAULT NULL," + + "role_id INT NULL DEFAULT NULL," + + "PRIMARY KEY (id))" + ) + } +} diff --git a/mybatis-plus-extension/src/test/kotlin/com/baomidou/mybatisplus/test/kotlin/DbTest.kt b/mybatis-plus-extension/src/test/kotlin/com/baomidou/mybatisplus/test/kotlin/DbTest.kt new file mode 100644 index 000000000..276939aaf --- /dev/null +++ b/mybatis-plus-extension/src/test/kotlin/com/baomidou/mybatisplus/test/kotlin/DbTest.kt @@ -0,0 +1,63 @@ +package com.baomidou.mybatisplus.test.kotlin + +import com.baomidou.mybatisplus.extension.toolkit.Db +import org.apache.ibatis.exceptions.PersistenceException +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertThrows +import org.junit.jupiter.api.Test +import java.util.* + + +class DbTest : BaseDbTest() { + + @Test + fun testQuery() { + val list = Db.ktQuery(User::class.java).eq(User::id, 1).list() + Assertions.assertEquals(1, list.size) + val user1 = Db.ktQuery(User::class.java).eq(User::id, 1).one() + Assertions.assertEquals("gozei", user1.name) + val user2 = Db.ktQuery(User::class.java).eq(User::name, "gozei").eq(User::id, 1).one() + Assertions.assertEquals(1, user2::id.get()) + val user3 = Db.ktQuery(User::class.java).list().first() + Assertions.assertEquals("gozei", user3.name) + val exists = Db.ktQuery(User::class.java).eq(User::id, 1).exists() + Assertions.assertTrue(exists) + } + + @Test + fun testUpdate() { + Db.ktUpdate(User::class.java).eq(User::id, 1).set(User::name, "sheep").update() + Assertions.assertEquals("sheep", Db.ktQuery(User::class.java).eq(User::id, 1).one().name) + Db.ktUpdate(User::class.java).eq(User::name, "gozei").set(User::name, "sheep").update() + Assertions.assertEquals("sheep", Db.ktQuery(User::class.java).eq(User::id, 1).one().name) + } + + @Test + fun exceptionTest() { + assertThrows(PersistenceException::class.java) { + Db.ktQuery(User::class.java).eq(null, 1).one() + } + } + + @Test + fun remove() { + val isSuccessId = Db.remove(Db.ktQuery(User::class.java).eq(User::id, 1).wrapper) + Assertions.assertTrue(isSuccessId) + val isSuccessName = Db.remove(Db.ktQuery(User::class.java).eq(User::name, "gozei").wrapper) + Assertions.assertFalse(isSuccessName) + } + + override fun tableDataSql(): String { + return "insert into `sys_user`(id,username,role_id) values(1,'gozei',null),(2,'chocolate',null)" + } + + override fun tableSql(): List? { + return Arrays.asList( + "drop table if exists `sys_user`", "CREATE TABLE IF NOT EXISTS `sys_user` (" + + "id INT NOT NULL," + + "username VARCHAR(30) NULL DEFAULT NULL," + + "role_id INT NULL DEFAULT NULL," + + "PRIMARY KEY (id))" + ) + } +} diff --git a/mybatis-plus-extension/src/test/kotlin/com/baomidou/mybatisplus/test/kotlin/UserMapper.kt b/mybatis-plus-extension/src/test/kotlin/com/baomidou/mybatisplus/test/kotlin/UserMapper.kt new file mode 100644 index 000000000..4d9aad7b9 --- /dev/null +++ b/mybatis-plus-extension/src/test/kotlin/com/baomidou/mybatisplus/test/kotlin/UserMapper.kt @@ -0,0 +1,5 @@ +package com.baomidou.mybatisplus.test.kotlin + +import com.baomidou.mybatisplus.core.mapper.BaseMapper + +interface UserMapper : BaseMapper -- Gitee