Mybatis-plus进阶篇(二)
Mybatis-plus进阶篇(二)
Jie[toc]
一.条件构造器方法
1.eq
eq 方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的相等条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的相等条件 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
val:与字段名对应的值。
condition:一个布尔值,用于控制是否应用这个相等条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
2.ne
ne 方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的不相等条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的不相等条件 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
val:与字段名对应的值。
condition:一个布尔值,用于控制是否应用这个不相等条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
3.gt
gt 方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的大于条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的大于条件 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
val:与字段名对应的值。
condition:一个布尔值,用于控制是否应用这个大于条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
注意:
- gt 方法适用于数值型字段,对于字符串等非数值型字段,使用 gt 可能会导致不期望的结果或错误。
- 在使用 gt 方法时,确保 val 参数的类型与字段类型相匹配,以避免类型转换错误。
- 如果需要根据某些条件动态添加大于条件,可以使用带有 condition 参数的重载方法
4.ge
ge 方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的大于等于条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的大于等于条件 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
val:与字段名对应的值。
condition:一个布尔值,用于控制是否应用这个大于等于条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
注意事项:
- ge 方法适用于数值型字段,对于字符串等非数值型字段,使用 ge 可能会导致不期望的结果或错误。
- 在使用 ge 方法时,确保 val 参数的类型与字段类型相匹配,以避免类型转换错误。
- 如果需要根据某些条件动态添加大于等于条件,可以使用带有 condition 参数的重载方法。
5.lt
lt 方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的小于条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的小于条件 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
val:与字段名对应的值。
condition:一个布尔值,用于控制是否应用这个小于是条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
注意事项:
- lt 方法适用于数值型字段,对于字符串等非数值型字段,使用 lt 可能会导致不期望的结果或错误。
- 在使用 lt 方法时,确保 val 参数的类型与字段类型相匹配,以避免类型转换错误。
- 如果需要根据某些条件动态添加小于条件,可以使用带有 condition 参数的重载方法。
6.le
le 方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的小于等于条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的小于等于条件 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
val:与字段名对应的值。
condition:一个布尔值,用于控制是否应用这个小于是条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
注意事项:
- le 方法适用于数值型字段,对于字符串等非数值型字段,使用 le 可能会导致不期望的结果或错误。
- 在使用 le 方法时,确保 val 参数的类型与字段类型相匹配,以避免类型转换错误。
- 如果需要根据某些条件动态添加小于等于条件,可以使用带有 condition 参数的重载方法。
7.between
between 方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的 BETWEEN 条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的 BETWEEN 条件 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
val1:与字段名对应的第一个值,表示 BETWEEN 条件的起始值。
val2:与字段名对应的第二个值,表示 BETWEEN 条件的结束值。
condition:一个布尔值,用于控制是否应用这个 BETWEEN 条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
注意事项:
- between 方法适用于数值型字段,对于字符串等非数值型字段,使用 between 可能会导致不期望的结果或错误。
- 在使用 between 方法时,确保 val1 和 val2 参数的类型与字段类型相匹配,以避免类型转换错误。
- 如果需要根据某些条件动态添加 BETWEEN 条件,可以使用带有 condition 参数的重载方法。
8.notBetween
notBetween 方法是 MyBatis-Plus 中用于构建查询条件的另一个基本方法,它用于设置单个字段的 NOT BETWEEN 条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的 NOT BETWEEN 条件 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
val1:与字段名对应的第一个值,表示 NOT BETWEEN 条件的起始值。
val2:与字段名对应的第二个值,表示 NOT BETWEEN 条件的结束值。
condition:一个布尔值,用于控制是否应用这个 NOT BETWEEN 条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
注意事项:
- notBetween 方法同样适用于数值型字段,对于字符串等非数值型字段,使用 notBetween 可能会导致不期望的结果或错误。
- 在使用 notBetween 方法时,确保 val1 和 val2 参数的类型与字段类型相匹配,以避免类型转换错误。
- 如果需要根据某些条件动态添加 NOT BETWEEN 条件,可以使用带有 condition 参数的重载方法。
9.like
like 方法是 MyBatis-Plus 中用于构建模糊查询条件的基本方法之一,它用于设置单个字段的 LIKE 条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的 LIKE 条件 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
val:与字段名对应的值,表示 LIKE 条件中的搜索值。
condition:一个布尔值,用于控制是否应用这个 LIKE 条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
注意事项:
- like 方法适用于字符串类型的字段,用于模糊匹配。
- 默认情况下,like 方法会在搜索值前后添加 %,实现全模糊匹配。如果需要左模糊或右模糊匹配,可以使用 likeRight 或 likeLeft 方法。
- 在使用 like 方法时,确保 val 参数的类型是字符串,以避免类型转换错误。
- 如果需要根据某些条件动态添加 LIKE 条件,可以使用带有 condition 参数的重载方法
10.notLike
notLike 方法是 MyBatis-Plus 中用于构建模糊查询条件的另一个基本方法,它用于设置单个字段的 NOT LIKE 条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的 NOT LIKE 条件 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
val:与字段名对应的值,表示 NOT LIKE 条件中的搜索值。
condition:一个布尔值,用于控制是否应用这个 NOT LIKE 条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
注意事项:
- notLike 方法适用于字符串类型的字段,用于排除特定的模糊匹配。
- 默认情况下,notLike 方法会在搜索值前后添加 %,实现全模糊排除。如果需要排除左模糊或排除右模糊匹配,可以使用 notLikeRight 或 notLikeLeft 方法。
- 在使用 notLike 方法时,确保 val 参数的类型是字符串,以避免类型转换错误。
- 如果需要根据某些条件动态添加 NOT LIKE 条件,可以使用带有 condition 参数的重载方法。
11.likeLeft
likeLeft 方法是 MyBatis-Plus 中用于构建模糊查询条件的基本方法之一,它用于设置单个字段的右模糊匹配条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的右模糊匹配条件 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
val:与字段名对应的值,表示右模糊匹配条件中的搜索值。
condition:一个布尔值,用于控制是否应用这个右模糊匹配条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
注意事项:
- likeLeft 方法适用于字符串类型的字段,用于右模糊匹配,即匹配以指定字符串开头的记录。
- 默认情况下,likeLeft 方法会在搜索值前添加 %,实现右模糊匹配。如果需要全模糊或左模糊匹配,可以使用 like 或 likeRight 方法。
3.在使用 likeLeft 方法时,确保 val 参数的类型是字符串,以避免类型转换错误。
如果需要根据某些条件动态添加右模糊匹配条件,可以使用带有 condition 参数的重载方法。
12.likeRight
likeRight 方法是 MyBatis-Plus 中用于构建模糊查询条件的基本方法之一,它用于设置单个字段的左模糊匹配条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的左模糊匹配条件 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
val:与字段名对应的值,表示左模糊匹配条件中的搜索值。
condition:一个布尔值,用于控制是否应用这个左模糊匹配条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
注意事项:
- likeRight 方法适用于字符串类型的字段,用于左模糊匹配,即匹配以指定字符串结尾的记录。
- 默认情况下,likeRight 方法会在搜索值后添加 %,实现左模糊匹配。如果需要全模糊或右模糊匹配,可以使用 like 或 likeLeft 方法。
- 在使用 likeRight 方法时,确保 val 参数的类型是字符串,以避免类型转换错误。
- 如果需要根据某些条件动态添加左模糊匹配条件,可以使用带有 condition 参数的重载方法。
13.notLikeLeft
notLikeLeft 方法是 MyBatis-Plus 中用于构建模糊查询条件的另一个基本方法,它用于设置单个字段的非右模糊匹配条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的非右模糊匹配条件 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
val:与字段名对应的值,表示非右模糊匹配条件中的搜索值。
condition:一个布尔值,用于控制是否应用这个非右模糊匹配条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
注意事项:
- notLikeLeft 方法适用于字符串类型的字段,用于排除以指定字符串开头的记录。
- 默认情况下,notLikeLeft 方法会在搜索值前添加 %,实现非右模糊匹配。如果需要排除全模糊或左模糊匹配,可以使用 notLike 或 notLikeRight 方法。
- 在使用 notLikeLeft 方法时,确保 val 参数的类型是字符串,以避免类型转换错误。
- 如果需要根据某些条件动态添加非右模糊匹配条件,可以使用带有 condition 参数的重载方法。
14.notLikeRight
notLikeRight 方法是 MyBatis-Plus 中用于构建模糊查询条件的另一个基本方法,它用于设置单个字段的非左模糊匹配条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的非左模糊匹配条件 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
val:与字段名对应的值,表示非左模糊匹配条件中的搜索值。
condition:一个布尔值,用于控制是否应用这个非左模糊匹配条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
注意事项:
- notLikeRight 方法适用于字符串类型的字段,用于排除以指定字符串结尾的记录。
- 默认情况下,notLikeRight 方法会在搜索值后添加 %,实现非左模糊匹配。如果需要排除全模糊或右模糊匹配,可以使用 notLike 或 notLikeLeft 方法。
- 在使用 notLikeRight 方法时,确保 val 参数的类型是字符串,以避免类型转换错误。
- 如果需要根据某些条件动态添加非左模糊匹配条件,可以使用带有 condition 参数的重载方法。
15.isNull
isNull 方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的 IS NULL 条件。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的 IS NULL 条件 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
condition:一个布尔值,用于控制是否应用这个 IS NULL 条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
注意事项:
- isNull 方法适用于所有类型的字段,用于查询字段值为 NULL 的记录。
- 在使用 isNull 方法时,确保 column 参数正确指向了数据库中的字段名或使用 Lambda 表达式的字段名。
- 如果需要根据某些条件动态添加 IS NULL 条件,可以使用带有 condition 参数的重载方法。
16.in
in 方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的 IN 条件,即字段的值在给定的集合中。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的 IN 条件,使用集合、 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
value:一个集合,包含 IN 条件中字段可能的值。
values:一个可变参数列表,包含 IN 条件中字段可能的值。
condition:一个布尔值,用于控制是否应用这个 IN 条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
注意事项:
- in 方法适用于所有类型的字段,用于查询字段值在给定集合中的记录。
- 在使用 in 方法时,确保 column 参数正确指向了数据库中的字段名或使用 Lambda 表达式的字段名。
- 如果需要根据某些条件动态添加 IN 条件,可以使用带有 condition 参数的重载方法。
17.notIn
notIn 方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的 NOT IN 条件,即字段的值不在给定的集合中。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的 NOT IN 条件,使用集合 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
value:一个集合,包含 NOT IN 条件中字段可能的值。
values:一个可变参数列表,包含 NOT IN 条件中字段可能的值。
condition:一个布尔值,用于控制是否应用这个 NOT IN 条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
注意事项:
- notIn 方法适用于所有类型的字段,用于查询字段值不在给定集合中的记录。
- 在使用 notIn 方法时,确保 column 参数正确指向了数据库中的字段名或使用 Lambda 表达式的字段名。
- 如果需要根据某些条件动态添加 NOT IN 条件,可以使用带有 condition 参数的重载方法。
18.inSql
inSql 方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它用于设置单个字段的 IN 条件,但与 in 方法不同的是,inSql 允许你直接使用 SQL 语句来生成 IN 子句中的值集合。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的 IN 条件,使用 SQL 语句 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
sqlValue:一个字符串,包含用于生成 IN 子句中值集合的 SQL 语句。
condition:一个布尔值,用于控制是否应用这个 IN 条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL:
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
使用子查询的示例:
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
生成的 SQL:
1 | SELECT * FROM user WHERE id IN (select id from other_table where id < 3) |
注意事项:
- inSql 方法允许你使用 SQL 语句来生成 IN 子句中的值集合,这为复杂的查询条件提供了灵活性。
- 在使用 inSql 方法时,确保 column 参数正确指向了数据库中的字段名或使用 Lambda 表达式的字段名。
- sqlValue 参数应该是一个有效的 SQL 语句,它将直接嵌入到生成的 SQL 中,因此需要确保其安全性和正确性,应避免 SQL 由前端动态参数传入并直接引用。
- 如果需要根据某些条件动态添加 IN 条件,可以使用带有 condition 参数的重载方法。
19.notInSql
notInSql 方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它用于设置单个字段的 NOT IN 条件,但与 notIn 方法不同的是,notInSql 允许你直接使用 SQL 语句来生成 NOT IN 子句中的值集合。
使用范围
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
方法签名
1 | // 设置指定字段的 NOT IN 条件,使用 SQL 语句 |
参数说明
column:数据库字段名或使用 Lambda 表达式的字段名。
sqlValue:一个字符串,包含用于生成 NOT IN 子句中值集合的 SQL 语句。
condition:一个布尔值,用于控制是否应用这个 NOT IN 条件。
示例
普通 Wrapper (QueryWrapper):
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
Lambda Wrapper (LambdaQueryWrapper):
1 | LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); |
生成的 SQL
1 | -- 普通 Wrapper 和 Lambda Wrapper 生成的 SQL 相同 |
使用子查询的示例:
1 | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
生成的 SQL
1 | SELECT * FROM user WHERE id NOT IN (select id from other_table where id < 3) |
注意事项:
- notInSql 方法允许你使用 SQL 语句来生成 NOT IN 子句中的值集合,这为复杂的查询条件提供了灵活性。
- 在使用 notInSql 方法时,确保 column 参数正确指向了数据库中的字段名或使用 Lambda 表达式的字段名。
- sqlValue 参数应该是一个有效的 SQL 语句,它将直接嵌入到生成的 SQL 中,因此需要确保其安全性和正确性,应避免 SQL 由前端动态参数传入并直接引用。
- 如果需要根据某些条件动态添加 NOT IN 条件,可以使用带有 condition 参数的重载方法。