doc: 优化where动态条件说明

This commit is contained in:
robor.luo 2024-01-26 13:04:50 +08:00
parent d59bb223df
commit 48f9c4bb88

View File

@ -533,13 +533,18 @@ WHERE id >= ?
AND user_name LIKE ? AND user_name LIKE ?
``` ```
## where 动态条件 1 ## where 动态条件
::: tip 注意
QueryWrapper条件构建中若参数为null时默认会被忽略不会拼接查询条件
:::
**方式1when()**
```java 1,4 ```java 1,4
boolean flag = false; boolean flag = false;
QueryWrapper queryWrapper = QueryWrapper.create() QueryWrapper queryWrapper = QueryWrapper.create()
.select().from(ACCOUNT) .select().from(ACCOUNT)
.where(flag ? ACCOUNT.ID.ge(100) : noCondition()) .where(ACCOUNT.ID.ge(100).when(flag)) //flag为false忽略该条件
.and(ACCOUNT.USER_NAME.like("michael")); .and(ACCOUNT.USER_NAME.like("michael"));
``` ```
@ -547,60 +552,36 @@ QueryWrapper queryWrapper = QueryWrapper.create()
```sql ```sql
SELECT * FROM tb_account SELECT * FROM tb_account
WHERE user_name LIKE ? WHERE user_name LIKE 'michael'
``` ```
**方式2使用重载方法**
## where 动态条件 2
```java 1,4 ```java 1,4
boolean flag = false; boolean flag = false;
QueryWrapper queryWrapper = QueryWrapper.create() QueryWrapper queryWrapper = QueryWrapper.create()
.select().from(ACCOUNT) .select().from(ACCOUNT)
.where(ACCOUNT.ID.ge(100, flag)) .and(ACCOUNT.USER_NAME.like("michael", flag)); //flag为false忽略该条件
// 等同于 .where(ACCOUNT.ID.ge(100).when(flag))
.and(ACCOUNT.USER_NAME.like("michael"));
``` ```
对当前条件参数进行判断:
其查询生成的 Sql 如下:
```sql
SELECT * FROM tb_account
WHERE user_name LIKE ?
```
## where 动态条件 3
```java 1,5 ```java 1,5
String name = null; String name = "";
QueryWrapper queryWrapper = QueryWrapper.create() QueryWrapper queryWrapper = QueryWrapper.create()
.select().from(ACCOUNT) .select().from(ACCOUNT)
.where(ACCOUNT.ID.ge(100)) // when.... .where(ACCOUNT.USER_NAME.like(name, StringUtil::isNotBlank)); //name为空字符串忽略该条件
.and(ACCOUNT.USER_NAME.like(name, StringUtil::isNotBlank));
``` ```
框架提供了工具类`If`,包含常用的判断方法(如非空、非空集合、非空字符串等),供开发者简化代码:
其查询生成的 Sql 如下:
```sql
SELECT * FROM tb_account
WHERE id >= ?
```
## where 动态条件 4
```java 1,5 ```java 1,5
String name = null; String name = "";
QueryWrapper queryWrapper = QueryWrapper.create() QueryWrapper queryWrapper = QueryWrapper.create()
.select().from(ACCOUNT) .select().from(ACCOUNT)
.where(ACCOUNT.ID.ge(100)) .where(ACCOUNT.USER_NAME.like(name, If::hasText)); //name是否有文本
.and(ACCOUNT.USER_NAME.like(name, If::hasText));
``` ```
其查询生成的 Sql 如下: 上述代码生成的 Sql 如下:
```sql ```sql
SELECT * FROM tb_account SELECT * FROM tb_account;
WHERE id >= ?
``` ```
## where 使用 SQL 函数 ## where 使用 SQL 函数
你可以通过使用 QueryMethods 类下的函数实现 where 对指定列运算后作为条件进行查询QueryMethods 位于 mybatisflex.core.query 下)。 你可以通过使用 QueryMethods 类下的函数实现 where 对指定列运算后作为条件进行查询QueryMethods 位于 mybatisflex.core.query 下)。