mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-06 16:48:24 +08:00
commit
eb1a23ce9c
@ -19,68 +19,70 @@
|
|||||||
|
|
||||||
- 快速构建启动:通过DSL➕重载运算符,快速配置 MybatisFlexBootstrap 实例并启动:
|
- 快速构建启动:通过DSL➕重载运算符,快速配置 MybatisFlexBootstrap 实例并启动:
|
||||||
```kotlin
|
```kotlin
|
||||||
buildBootstrap {
|
runFlex {
|
||||||
// 配置数据源 相当于 setDataSource(dataSource)
|
// 配置数据源 相当于 setDataSource(dataSource)
|
||||||
+dataSource
|
+dataSource
|
||||||
// 配置Mapper 相当于 addMapper(AccountMapper::class.java)
|
// 配置Mapper 相当于 addMapper(AccountMapper::class.java)
|
||||||
+AccountMapper::class
|
+AccountMapper::class
|
||||||
// 配置日志输出 相当于 setLogImpl(StdOutImpl::class.java)
|
// 配置日志输出 相当于 setLogImpl(StdOutImpl::class.java)
|
||||||
logImpl = StdOutImpl::class
|
logImpl = StdOutImpl::class
|
||||||
}.start()
|
}
|
||||||
```
|
```
|
||||||
- 快速查询数据:通过DSL➕泛型快速编写查询语句并查询: (快速查询提供三个函数:all, filter 和 query )
|
- 快速查询数据:通过DSL➕泛型快速编写查询语句并查询: (快速查询提供三个函数:all, filter 和 query )
|
||||||
>- `all<实体类>()` 查泛型对应的表的所有数据
|
>- `all<实体类>()` 查泛型对应的表的所有数据
|
||||||
>- `filter<实体类>(vararg KProperty<*>, ()->QueryCondition)` 按条件查泛型对应的表的数据
|
>- `filter<实体类>(vararg KProperty<*>, ()->QueryCondition)` 按条件查泛型对应的表的数据
|
||||||
>- `query<实体类>(QueryScope.()->Unit)` 较复杂查泛型对应的表的数据 (如: 分组,排序等)
|
>- `query<实体类>(QueryScope.()->Unit)` 较复杂查泛型对应的表的数据 (如: 分组,排序等)
|
||||||
|
>- `paginateWith(pageNumber: Number, pageSize: Number, totalRow: Number? = null, queryConditionGet: () -> QueryCondition): Page<实体类>`
|
||||||
|
与 `paginate(pageNumber: Number, pageSize: Number, totalRow: Number? = null, init: QueryScope.() -> Unit): Page<实体类>` 使用分页的条件查询与较复杂查询
|
||||||
- 简明地构建查询:通过中缀表达式➕扩展方法能更加简单明了的构建条件:
|
- 简明地构建查询:通过中缀表达式➕扩展方法能更加简单明了的构建条件:
|
||||||
* **【对比原生】**
|
|
||||||
* **原生**
|
|
||||||
```kotlin
|
|
||||||
val queryWrapper = QueryWrapper.create()
|
|
||||||
.select(Account::id.column(), Account::userName.column())
|
|
||||||
.where(Account::age.column().isNotNull()).and(Account::age.column().ge(17))
|
|
||||||
.orderBy(Account::id.column().desc())
|
|
||||||
mapper<AccountMapper>().selectListByQuery(queryWrapper)
|
|
||||||
```
|
|
||||||
|
|
||||||
* **扩展后**
|
* **【对比原生】**
|
||||||
```kotlin
|
* **原生**
|
||||||
query<Account> {
|
```kotlin
|
||||||
select(Account::id, Account::userName)
|
val queryWrapper = QueryWrapper.create()
|
||||||
where(Account::age.isNotNull) and { Account::age ge 17 } orderBy -Account::id
|
.select(QueryColumn("id"), QueryColumn("user_name"))
|
||||||
}
|
.where(QueryColumn("age").isNotNull()).and(QueryColumn("age").ge(17))
|
||||||
```
|
.orderBy(QueryColumn("id").desc())
|
||||||
执行的SQL:
|
mapper<AccountMapper>().selectListByQuery(queryWrapper)
|
||||||
```sql
|
```
|
||||||
SELECT `id`, `user_name` FROM `tb_account` WHERE `age` IS NOT NULL AND `age` >= 17 ORDER BY `id` DESC
|
|
||||||
```
|
|
||||||
|
|
||||||
* **【条件优化】**
|
* **扩展后**
|
||||||
- 例如: 查询属性是否在一个连续的区间时,会自动将 IN 转为 BETWEEN 调用
|
```kotlin
|
||||||
```kotlin
|
// 无需注册Mapper与APT/KSP即可查询操作
|
||||||
filter<Account> { Account::age `in` (17..19) }
|
val accountList: List<Account> = query {
|
||||||
```
|
select(Account::id, Account::userName)
|
||||||
|
where(Account::age.isNotNull) and { Account::age ge 17 } orderBy -Account::id
|
||||||
|
}
|
||||||
|
```
|
||||||
执行的SQL:
|
执行的SQL:
|
||||||
```sql
|
```sql
|
||||||
SELECT * FROM `tb_account` WHERE `age` BETWEEN 17 AND 19
|
SELECT `id`, `user_name` FROM `tb_account` WHERE `age` IS NOT NULL AND `age` >= 17 ORDER BY `id` DESC
|
||||||
```
|
|
||||||
- 例如: 构建多属性组合 IN (最多支持三个属性)
|
|
||||||
```kotlin
|
|
||||||
filter<Account> {
|
|
||||||
(Account::id to Account::userName to Account::age).inTriple(
|
|
||||||
1 to "张三" to 18,
|
|
||||||
2 to "李四" to 19,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
```
|
|
||||||
执行的SQL:
|
|
||||||
```sql
|
|
||||||
SELECT * FROM `tb_account`
|
|
||||||
WHERE (`id` = 1 AND `user_name` = '张三' AND `age` = 18)
|
|
||||||
OR (`id` = 2 AND `user_name` = '李四' AND `age` = 19)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* **【条件优化】**
|
||||||
|
- 例如: 查询属性是否在一个连续的区间时,会自动将 IN 转为 BETWEEN 调用
|
||||||
|
```kotlin
|
||||||
|
filter<Account> { Account::age `in` (17..19) }
|
||||||
|
```
|
||||||
|
执行的SQL:
|
||||||
|
```sql
|
||||||
|
SELECT * FROM `tb_account` WHERE `age` BETWEEN 17 AND 19
|
||||||
|
```
|
||||||
|
- 例如: 构建多属性组合 IN (最多支持三个属性)
|
||||||
|
```kotlin
|
||||||
|
filter<Account> {
|
||||||
|
(Account::id to Account::userName to Account::age).inTriple(
|
||||||
|
1 to "张三" to 18,
|
||||||
|
2 to "李四" to 19,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
执行的SQL:
|
||||||
|
```sql
|
||||||
|
SELECT * FROM `tb_account`
|
||||||
|
WHERE (`id` = 1 AND `user_name` = '张三' AND `age` = 18)
|
||||||
|
OR (`id` = 2 AND `user_name` = '李四' AND `age` = 19)
|
||||||
|
```
|
||||||
- 摆脱APT: 使用扩展方法摆脱对 APT(注解处理器) 的使用,直接使用属性引用让代码更加灵活优雅:
|
- 摆脱APT: 使用扩展方法摆脱对 APT(注解处理器) 的使用,直接使用属性引用让代码更加灵活优雅:
|
||||||
> 使用APT: `ACCOUNT.ID eq 1` ,使用属性引用: `Account::id eq 1`
|
> 使用APT: `ACCOUNT.ID eq 1` ,使用属性引用: `Account::id eq 1`
|
||||||
>
|
>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user