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