From 2bb2d9be626b1325194fd7971e296d3be4434660 Mon Sep 17 00:00:00 2001
From: kamosama <837080904@qq.com>
Date: Tue, 2 Jul 2024 14:35:18 +0800
Subject: [PATCH 1/2] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0readme=E5=AF=B9?=
=?UTF-8?q?=E4=BA=8E=E6=8F=92=E4=BB=B6=E9=85=8D=E7=BD=AE=E7=AD=89=E6=8F=90?=
=?UTF-8?q?=E9=86=92=E6=8F=8F=E8=BF=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
readme.md | 35 +++++++++++++++++++----------------
readme_zh.md | 35 +++++++++++++++++++----------------
2 files changed, 38 insertions(+), 32 deletions(-)
diff --git a/readme.md b/readme.md
index 98b656a..977fc2b 100644
--- a/readme.md
+++ b/readme.md
@@ -1,5 +1,7 @@
# 基于 Kotlin 扩展 Mybatis-Flex
+
**MyBatis-Flex-Kotlin 基于 [Mybatis-Flex](https://mybatis-flex.com) 的 Kotlin 扩展模块,方便 Kotlin 开发者使用 MyBatis-Flex 进行开发**
+
> 它继承了 Mybatis-Flex 轻量的特性,同时拥有 Kotlin 特有的扩展方法、中缀表达式与DSL等语法支持,
> 使其拥有了更高的灵活性。让我们可以更加轻松的在 Kotlin 中使用 MyBatis-Flex 所带来的开发效率和开发体验。
@@ -14,16 +16,19 @@
## 亮点
- 快速构建启动:通过DSL➕重载运算符,快速配置 MybatisFlexBootstrap 实例并启动:
- ```kotlin
- runFlex {
- // 配置数据源 相当于 setDataSource(dataSource)
- +dataSource
- // 配置Mapper 相当于 addMapper(AccountMapper::class.java)
- +AccountMapper::class
- // 配置日志输出 相当于 setLogImpl(StdOutImpl::class.java)
- logImpl = StdOutImpl::class
- }
- ```
+ > ⚠️
+ SpringBoot环境中无需通过此方式配置,请参考[mybatis-flex-spring-boot](https://mybatis-flex.com/zh/base/configuration.html)
+ 进行配置
+ ```kotlin
+ runFlex {
+ // 配置数据源 相当于 setDataSource(dataSource)
+ +dataSource
+ // 配置Mapper 相当于 addMapper(AccountMapper::class.java)
+ +AccountMapper::class
+ // 配置日志输出 相当于 setLogImpl(StdOutImpl::class.java)
+ logImpl = StdOutImpl::class
+ }
+ ```
- 快速查询数据:通过DSL➕泛型快速编写查询语句并查询: (快速查询提供三个函数:all, filter 和 query )
>- `all<实体类>()` 查泛型对应的表的所有数据
>- `filter<实体类>(vararg KProperty<*>, ()->QueryCondition)` 按条件查泛型对应的表的数据
@@ -122,7 +127,7 @@
dependencies {
//kotlin扩展库
implementation("com.mybatis-flex:mybatis-flex-kotlin-extensions:$extensionsVersion")
- //核心库
+ //核心库(或mybatis-flex-spring-boot-starter等库)
implementation("com.mybatis-flex:mybatis-flex-core:$coreVersion")
}
```
@@ -137,7 +142,7 @@ dependencies {
mybatis-flex-kotlin-extensions
${mybatis-flex-kotlin-extensions.version}
-
+
com.mybatis-flex
mybatis-flex-core
@@ -166,11 +171,9 @@ data class Account(
- 使用 `@Table("tb_account")` 设置实体类与表名的映射关系
- 使用 `@Id` 标识主键
-> ⚠️ 最好不要写成 data class ,否则没有无参构造某些情况下会报错,例如属性的顺序与数据库字段不一致会导致报错;
->
-> 如有需要可以安装官方 [noArg](https://kotlinlang.org/docs/no-arg-plugin.html) 插件;
+> ⚠️ 实体类为`data class`时,需要注意实体类没有无参构造和没有打开继承某些情况下会报错,例如属性的顺序与数据库字段不一致会导致报错;
>
-> 或是使用本框架提供的整合插件 [com.mybatis-flex.kotlin](docs/kotlinGradlePlugin.md)
+> 具体原因与解决方式详见: [Mybatis-Flex-Kotlin-Plugin](docs/kotlinGradlePlugin.md)
**第 4 步:开始使用**
diff --git a/readme_zh.md b/readme_zh.md
index 98b656a..977fc2b 100644
--- a/readme_zh.md
+++ b/readme_zh.md
@@ -1,5 +1,7 @@
# 基于 Kotlin 扩展 Mybatis-Flex
+
**MyBatis-Flex-Kotlin 基于 [Mybatis-Flex](https://mybatis-flex.com) 的 Kotlin 扩展模块,方便 Kotlin 开发者使用 MyBatis-Flex 进行开发**
+
> 它继承了 Mybatis-Flex 轻量的特性,同时拥有 Kotlin 特有的扩展方法、中缀表达式与DSL等语法支持,
> 使其拥有了更高的灵活性。让我们可以更加轻松的在 Kotlin 中使用 MyBatis-Flex 所带来的开发效率和开发体验。
@@ -14,16 +16,19 @@
## 亮点
- 快速构建启动:通过DSL➕重载运算符,快速配置 MybatisFlexBootstrap 实例并启动:
- ```kotlin
- runFlex {
- // 配置数据源 相当于 setDataSource(dataSource)
- +dataSource
- // 配置Mapper 相当于 addMapper(AccountMapper::class.java)
- +AccountMapper::class
- // 配置日志输出 相当于 setLogImpl(StdOutImpl::class.java)
- logImpl = StdOutImpl::class
- }
- ```
+ > ⚠️
+ SpringBoot环境中无需通过此方式配置,请参考[mybatis-flex-spring-boot](https://mybatis-flex.com/zh/base/configuration.html)
+ 进行配置
+ ```kotlin
+ runFlex {
+ // 配置数据源 相当于 setDataSource(dataSource)
+ +dataSource
+ // 配置Mapper 相当于 addMapper(AccountMapper::class.java)
+ +AccountMapper::class
+ // 配置日志输出 相当于 setLogImpl(StdOutImpl::class.java)
+ logImpl = StdOutImpl::class
+ }
+ ```
- 快速查询数据:通过DSL➕泛型快速编写查询语句并查询: (快速查询提供三个函数:all, filter 和 query )
>- `all<实体类>()` 查泛型对应的表的所有数据
>- `filter<实体类>(vararg KProperty<*>, ()->QueryCondition)` 按条件查泛型对应的表的数据
@@ -122,7 +127,7 @@
dependencies {
//kotlin扩展库
implementation("com.mybatis-flex:mybatis-flex-kotlin-extensions:$extensionsVersion")
- //核心库
+ //核心库(或mybatis-flex-spring-boot-starter等库)
implementation("com.mybatis-flex:mybatis-flex-core:$coreVersion")
}
```
@@ -137,7 +142,7 @@ dependencies {
mybatis-flex-kotlin-extensions
${mybatis-flex-kotlin-extensions.version}
-
+
com.mybatis-flex
mybatis-flex-core
@@ -166,11 +171,9 @@ data class Account(
- 使用 `@Table("tb_account")` 设置实体类与表名的映射关系
- 使用 `@Id` 标识主键
-> ⚠️ 最好不要写成 data class ,否则没有无参构造某些情况下会报错,例如属性的顺序与数据库字段不一致会导致报错;
->
-> 如有需要可以安装官方 [noArg](https://kotlinlang.org/docs/no-arg-plugin.html) 插件;
+> ⚠️ 实体类为`data class`时,需要注意实体类没有无参构造和没有打开继承某些情况下会报错,例如属性的顺序与数据库字段不一致会导致报错;
>
-> 或是使用本框架提供的整合插件 [com.mybatis-flex.kotlin](docs/kotlinGradlePlugin.md)
+> 具体原因与解决方式详见: [Mybatis-Flex-Kotlin-Plugin](docs/kotlinGradlePlugin.md)
**第 4 步:开始使用**
--
Gitee
From 44ce355cffd7404349ae9334cb29b6fd88a2805f Mon Sep 17 00:00:00 2001
From: rainy
Date: Wed, 10 Jul 2024 14:49:24 +0800
Subject: [PATCH 2/2] =?UTF-8?q?Fix:=20queryOne,queryOneAs=E5=9C=A8?=
=?UTF-8?q?=E6=9F=A5=E8=AF=A2=E7=BB=93=E6=9E=9C=E4=B8=BAnull=E6=97=B6?=
=?UTF-8?q?=E4=BB=8D=E8=BF=9B=E8=A1=8CqueryRow?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/kotlin/extensions/db/DbExtensions.kt | 41 ++++++++++++-------
1 file changed, 26 insertions(+), 15 deletions(-)
diff --git a/mybatis-flex-kotlin-extensions/src/main/kotlin/extensions/db/DbExtensions.kt b/mybatis-flex-kotlin-extensions/src/main/kotlin/extensions/db/DbExtensions.kt
index f8885df..f39c857 100644
--- a/mybatis-flex-kotlin-extensions/src/main/kotlin/extensions/db/DbExtensions.kt
+++ b/mybatis-flex-kotlin-extensions/src/main/kotlin/extensions/db/DbExtensions.kt
@@ -81,14 +81,19 @@ val KClass.baseMapperOrNull: BaseMapper?
inline fun queryOne(
vararg columns: QueryColumn,
init: QueryScope.() -> Unit
-): E? = E::class.baseMapperOrNull?.selectOneByQuery(queryScope(columns = columns, init = init))
- ?: E::class.tableInfo.let {
- queryRow(schema = it.schema, tableName = it.tableName, columns = columns) {
- init()
- // 如果未调用select方法,则默认查询所有列
- if (this.hasSelect().not()) select(E::class.allColumns)
- }?.toEntity(E::class.java)
- }
+): E? {
+ val baseMapper = E::class.baseMapperOrNull
+ return if (baseMapper != null)
+ baseMapper.selectOneByQuery(queryScope(columns = columns, init = init))
+ else
+ E::class.tableInfo.let {
+ queryRow(schema = it.schema, tableName = it.tableName, columns = columns) {
+ init()
+ // 如果未调用select方法,则默认查询所有列
+ if (this.hasSelect().not()) select(E::class.allColumns)
+ }?.toEntity(E::class.java)
+ }
+}
/**
* 通过条件查询一条数据,并转换成指定类型
@@ -99,14 +104,20 @@ inline fun queryOne(
inline fun queryOneAs(
vararg columns: QueryColumn,
init: QueryScope.() -> Unit
-): T? = E::class.baseMapperOrNull?.selectOneByQueryAs(queryScope(columns = columns, init = init), T::class.java)
- ?: E::class.tableInfo.let {
- queryRow(schema = it.schema, tableName = it.tableName, columns = columns) {
- init()
- // 如果未调用select方法,则默认查询所有列
- if (this.hasSelect().not()) select(T::class.allColumns)
- }?.toEntity(T::class.java)
+): T? {
+ val baseMapper = E::class.baseMapperOrNull
+ return if (baseMapper != null) {
+ baseMapper.selectOneByQueryAs(queryScope(columns = columns, init = init), T::class.java)
+ } else {
+ E::class.tableInfo.let {
+ queryRow(schema = it.schema, tableName = it.tableName, columns = columns) {
+ init()
+ // 如果未调用select方法,则默认查询所有列
+ if (this.hasSelect().not()) select(T::class.allColumns)
+ }?.toEntity(T::class.java)
+ }
}
+}
/**
* 通过条件查询多条数据
--
Gitee