条件构造器
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
在 MyBatis-Plus 中,Wrapper 类是构建查询和更新条件的核心工具。以下是主要的 Wrapper 类及其功能:
AbstractWrapper :这是一个抽象基类,提供了所有 Wrapper 类共有的方法和属性。它定义了条件构造的基本逻辑,包括字段(column)、值(value)、操作符(condition)等。所有的 QueryWrapper、UpdateWrapper、LambdaQueryWrapper 和 LambdaUpdateWrapper 都继承自 AbstractWrapper。
QueryWrapper
:专门用于构造查询条件,支持基本的等于、不等于、大于、小于等各种常见操作。它允许你以链式调用的方式添加多个查询条件,并且可以组合使用
and
和
or
逻辑。
UpdateWrapper :用于构造更新条件,可以在更新数据时指定条件。与 QueryWrapper 类似,它也支持链式调用和逻辑组合。使用 UpdateWrapper 可以在不创建实体对象的情况下,直接设置更新字段和条件。
LambdaQueryWrapper :这是一个基于 Lambda 表达式的查询条件构造器,它通过 Lambda 表达式来引用实体类的属性,从而避免了硬编码字段名。这种方式提高了代码的可读性和可维护性,尤其是在字段名可能发生变化的情况下。
LambdaUpdateWrapper :类似于 LambdaQueryWrapper,LambdaUpdateWrapper 是基于 Lambda 表达式的更新条件构造器。它允许你使用 Lambda 表达式来指定更新字段和条件,同样避免了硬编码字段名的问题。
MyBatis-Plus 的 Wrapper 类是构建复杂查询和更新条件的关键工具。它允许开发者以链式调用的方式构造 SQL 的 WHERE 子句,提供了极大的灵活性和便利性。
以下是对 Wrapper 功能的提示和注意事项。
allEq
allEq
方法是 MyBatis-Plus 中用于构建查询条件的方法之一,它允许我们通过一个
Map
来设置多个字段的相等条件。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
params
:一个
Map
,其中
key
是数据库字段名,
value
是对应的字段值。
null2IsNull
:如果设置为
true
,当
Map
中的
value
为
null
时,会调用
isNull
方法;如果设置为
false
,则会忽略
value
为
null
的键值对。
filter
:一个
BiPredicate
,用于过滤哪些字段应该被包含在查询条件中。
condition
:一个布尔值,用于控制是否应用这些条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
带过滤器的普通 Wrapper (
QueryWrapper
)
:
带过滤器的 Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
eq
方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的相等条件。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
val
:与字段名对应的值。
condition
:一个布尔值,用于控制是否应用这个相等条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
ne
方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的不相等条件。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
val
:与字段名对应的值。
condition
:一个布尔值,用于控制是否应用这个不相等条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
gt
方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的大于条件。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
val
:与字段名对应的值。
condition
:一个布尔值,用于控制是否应用这个大于条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
gt
方法适用于数值型字段,对于字符串等非数值型字段,使用
gt
可能会导致不期望的结果或错误。
gt
方法时,确保
val
参数的类型与字段类型相匹配,以避免类型转换错误。
condition
参数的重载方法。
ge
方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的大于等于条件。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
val
:与字段名对应的值。
condition
:一个布尔值,用于控制是否应用这个大于等于条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
ge
方法适用于数值型字段,对于字符串等非数值型字段,使用
ge
可能会导致不期望的结果或错误。
ge
方法时,确保
val
参数的类型与字段类型相匹配,以避免类型转换错误。
condition
参数的重载方法。
lt
方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的小于条件。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
val
:与字段名对应的值。
condition
:一个布尔值,用于控制是否应用这个小于是条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
lt
方法适用于数值型字段,对于字符串等非数值型字段,使用
lt
可能会导致不期望的结果或错误。
lt
方法时,确保
val
参数的类型与字段类型相匹配,以避免类型转换错误。
condition
参数的重载方法。
le
方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的小于等于条件。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
val
:与字段名对应的值。
condition
:一个布尔值,用于控制是否应用这个小于是条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
le
方法适用于数值型字段,对于字符串等非数值型字段,使用
le
可能会导致不期望的结果或错误。
le
方法时,确保
val
参数的类型与字段类型相匹配,以避免类型转换错误。
condition
参数的重载方法。
between
between
方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的 BETWEEN 条件。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
val1
:与字段名对应的第一个值,表示 BETWEEN 条件的起始值。
val2
:与字段名对应的第二个值,表示 BETWEEN 条件的结束值。
condition
:一个布尔值,用于控制是否应用这个 BETWEEN 条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
between
方法适用于数值型字段,对于字符串等非数值型字段,使用
between
可能会导致不期望的结果或错误。
between
方法时,确保
val1
和
val2
参数的类型与字段类型相匹配,以避免类型转换错误。
condition
参数的重载方法。
notBetween
notBetween
方法是 MyBatis-Plus 中用于构建查询条件的另一个基本方法,它用于设置单个字段的 NOT BETWEEN 条件。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
val1
:与字段名对应的第一个值,表示 NOT BETWEEN 条件的起始值。
val2
:与字段名对应的第二个值,表示 NOT BETWEEN 条件的结束值。
condition
:一个布尔值,用于控制是否应用这个 NOT BETWEEN 条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
notBetween
方法同样适用于数值型字段,对于字符串等非数值型字段,使用
notBetween
可能会导致不期望的结果或错误。
notBetween
方法时,确保
val1
和
val2
参数的类型与字段类型相匹配,以避免类型转换错误。
condition
参数的重载方法。
like
方法是 MyBatis-Plus 中用于构建模糊查询条件的基本方法之一,它用于设置单个字段的 LIKE 条件。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
val
:与字段名对应的值,表示 LIKE 条件中的搜索值。
condition
:一个布尔值,用于控制是否应用这个 LIKE 条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
like
方法适用于字符串类型的字段,用于模糊匹配。
like
方法会在搜索值前后添加
%
,实现全模糊匹配。如果需要左模糊或右模糊匹配,可以使用
likeRight
或
likeLeft
方法。
like
方法时,确保
val
参数的类型是字符串,以避免类型转换错误。
condition
参数的重载方法。
notLike
notLike
方法是 MyBatis-Plus 中用于构建模糊查询条件的另一个基本方法,它用于设置单个字段的 NOT LIKE 条件。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
val
:与字段名对应的值,表示 NOT LIKE 条件中的搜索值。
condition
:一个布尔值,用于控制是否应用这个 NOT LIKE 条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
notLike
方法适用于字符串类型的字段,用于排除特定的模糊匹配。
notLike
方法会在搜索值前后添加
%
,实现全模糊排除。如果需要排除左模糊或排除右模糊匹配,可以使用
notLikeRight
或
notLikeLeft
方法。
notLike
方法时,确保
val
参数的类型是字符串,以避免类型转换错误。
condition
参数的重载方法。
likeLeft
likeLeft
方法是 MyBatis-Plus 中用于构建模糊查询条件的基本方法之一,它用于设置单个字段的右模糊匹配条件。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
val
:与字段名对应的值,表示右模糊匹配条件中的搜索值。
condition
:一个布尔值,用于控制是否应用这个右模糊匹配条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
likeLeft
方法适用于字符串类型的字段,用于右模糊匹配,即匹配以指定字符串开头的记录。
likeLeft
方法会在搜索值前添加
%
,实现右模糊匹配。如果需要全模糊或左模糊匹配,可以使用
like
或
likeRight
方法。
likeLeft
方法时,确保
val
参数的类型是字符串,以避免类型转换错误。
condition
参数的重载方法。
通过上述优化,
likeLeft
方法的文档更加清晰地展示了其用法、参数说明、示例以及注意事项,使得开发者能够更容易理解和正确使用该方法。
likeRight
likeRight
方法是 MyBatis-Plus 中用于构建模糊查询条件的基本方法之一,它用于设置单个字段的左模糊匹配条件。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
val
:与字段名对应的值,表示左模糊匹配条件中的搜索值。
condition
:一个布尔值,用于控制是否应用这个左模糊匹配条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
likeRight
方法适用于字符串类型的字段,用于左模糊匹配,即匹配以指定字符串结尾的记录。
likeRight
方法会在搜索值后添加
%
,实现左模糊匹配。如果需要全模糊或右模糊匹配,可以使用
like
或
likeLeft
方法。
likeRight
方法时,确保
val
参数的类型是字符串,以避免类型转换错误。
condition
参数的重载方法。
notLikeLeft
notLikeLeft
方法是 MyBatis-Plus 中用于构建模糊查询条件的另一个基本方法,它用于设置单个字段的非右模糊匹配条件。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
val
:与字段名对应的值,表示非右模糊匹配条件中的搜索值。
condition
:一个布尔值,用于控制是否应用这个非右模糊匹配条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
notLikeLeft
方法适用于字符串类型的字段,用于排除以指定字符串开头的记录。
notLikeLeft
方法会在搜索值前添加
%
,实现非右模糊匹配。如果需要排除全模糊或左模糊匹配,可以使用
notLike
或
notLikeRight
方法。
notLikeLeft
方法时,确保
val
参数的类型是字符串,以避免类型转换错误。
condition
参数的重载方法。
notLikeRight
notLikeRight
方法是 MyBatis-Plus 中用于构建模糊查询条件的另一个基本方法,它用于设置单个字段的非左模糊匹配条件。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
val
:与字段名对应的值,表示非左模糊匹配条件中的搜索值。
condition
:一个布尔值,用于控制是否应用这个非左模糊匹配条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
notLikeRight
方法适用于字符串类型的字段,用于排除以指定字符串结尾的记录。
notLikeRight
方法会在搜索值后添加
%
,实现非左模糊匹配。如果需要排除全模糊或右模糊匹配,可以使用
notLike
或
notLikeLeft
方法。
notLikeRight
方法时,确保
val
参数的类型是字符串,以避免类型转换错误。
condition
参数的重载方法。
通过上述优化,
notLikeRight
方法的文档更加清晰地展示了其用法、参数说明、示例以及注意事项,使得开发者能够更容易理解和正确使用该方法。
isNull
isNull
方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的 IS NULL 条件。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
condition
:一个布尔值,用于控制是否应用这个 IS NULL 条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
isNull
方法适用于所有类型的字段,用于查询字段值为 NULL 的记录。
isNull
方法时,确保
column
参数正确指向了数据库中的字段名或使用
Lambda
表达式的字段名。
condition
参数的重载方法。
in
方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的 IN 条件,即字段的值在给定的集合中。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
value
:一个集合,包含 IN 条件中字段可能的值。
values
:一个可变参数列表,包含 IN 条件中字段可能的值。
condition
:一个布尔值,用于控制是否应用这个 IN 条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
in
方法适用于所有类型的字段,用于查询字段值在给定集合中的记录。
in
方法时,确保
column
参数正确指向了数据库中的字段名或使用
Lambda
表达式的字段名。
condition
参数的重载方法。
notIn
notIn
方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于设置单个字段的 NOT IN 条件,即字段的值不在给定的集合中。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
value
:一个集合,包含 NOT IN 条件中字段可能的值。
values
:一个可变参数列表,包含 NOT IN 条件中字段可能的值。
condition
:一个布尔值,用于控制是否应用这个 NOT IN 条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
notIn
方法适用于所有类型的字段,用于查询字段值不在给定集合中的记录。
notIn
方法时,确保
column
参数正确指向了数据库中的字段名或使用
Lambda
表达式的字段名。
condition
参数的重载方法。
inSql
inSql
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它用于设置单个字段的 IN 条件,但与
in
方法不同的是,
inSql
允许你直接使用 SQL 语句来生成 IN 子句中的值集合。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
sqlValue
:一个字符串,包含用于生成 IN 子句中值集合的 SQL 语句。
condition
:一个布尔值,用于控制是否应用这个 IN 条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
使用子查询的示例 :
生成的 SQL
inSql
方法允许你使用 SQL 语句来生成 IN 子句中的值集合,这为复杂的查询条件提供了灵活性。
inSql
方法时,确保
column
参数正确指向了数据库中的字段名或使用
Lambda
表达式的字段名。
sqlValue
参数应该是一个有效的 SQL 语句,它将直接嵌入到生成的 SQL 中,因此需要确保其安全性和正确性,应避免 SQL 由前端动态参数传入并直接引用。
condition
参数的重载方法。
notInSql
notInSql
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它用于设置单个字段的 NOT IN 条件,但与
notIn
方法不同的是,
notInSql
允许你直接使用 SQL 语句来生成 NOT IN 子句中的值集合。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
sqlValue
:一个字符串,包含用于生成 NOT IN 子句中值集合的 SQL 语句。
condition
:一个布尔值,用于控制是否应用这个 NOT IN 条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
使用子查询的示例 :
生成的 SQL
notInSql
方法允许你使用 SQL 语句来生成 NOT IN 子句中的值集合,这为复杂的查询条件提供了灵活性。
notInSql
方法时,确保
column
参数正确指向了数据库中的字段名或使用
Lambda
表达式的字段名。
sqlValue
参数应该是一个有效的 SQL 语句,它将直接嵌入到生成的 SQL 中,因此需要确保其安全性和正确性,应避免 SQL 由前端动态参数传入并直接引用。
condition
参数的重载方法。
eqSql Since 3.5.6
eqSql
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,允许你设置一个字段等于(EQ)某个 SQL 语句的结果。这个方法特别适用于需要将字段值与子查询结果进行比较的场景。
column
:数据库字段名或使用
Lambda
表达式的字段名。
inValue
:一个字符串,包含用于生成等于条件的 SQL 语句。
condition
:一个布尔值,用于控制是否应用这个等于条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
eqSql
方法允许你将字段值与 SQL 语句的结果进行比较,这为复杂的查询条件提供了灵活性。
eqSql
方法时,确保
column
参数正确指向了数据库中的字段名或使用
Lambda
表达式的字段名。
inValue
参数应该是一个有效的 SQL 语句,它将直接嵌入到生成的 SQL 中,因此需要确保其安全性和正确性,应避免 SQL 由前端动态参数传入并直接引用。
condition
参数的重载方法。
gtSql Since 3.4.3.2
gtSql
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,允许你设置一个字段大于(GT)某个 SQL 语句的结果。
column
:数据库字段名或使用
Lambda
表达式的字段名。
inValue
:一个字符串,包含用于生成大于条件的 SQL 语句。
condition
:一个布尔值,用于控制是否应用这个大于条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
gtSql
方法允许你将字段值与 SQL 语句的结果进行比较,这为复杂的查询条件提供了灵活性。
gtSql
方法时,确保
column
参数正确指向了数据库中的字段名或使用
Lambda
表达式的字段名。
inValue
参数应该是一个有效的 SQL 语句,它将直接嵌入到生成的 SQL 中,因此需要确保其安全性和正确性,应避免 SQL 由前端动态参数传入并直接引用。
condition
参数的重载方法。
geSql Since 3.4.3.2
geSql
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,允许你设置一个字段大于等于(GE)某个 SQL 语句的结果。
column
:数据库字段名或使用
Lambda
表达式的字段名。
inValue
:一个字符串,包含用于生成大于等于条件的 SQL 语句。
condition
:一个布尔值,用于控制是否应用这个大于等于条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
geSql
方法允许你将字段值与 SQL 语句的结果进行比较,这为复杂的查询条件提供了灵活性。
geSql
方法时,确保
column
参数正确指向了数据库中的字段名或使用
Lambda
表达式的字段名。
inValue
参数应该是一个有效的 SQL 语句,它将直接嵌入到生成的 SQL 中,因此需要确保其安全性和正确性,应避免 SQL 由前端动态参数传入并直接引用。
condition
参数的重载方法。
ltSql Since 3.4.3.2
ltSql
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,允许你设置一个字段小于(LT)某个 SQL 语句的结果。
column
:数据库字段名或使用
Lambda
表达式的字段名。
inValue
:一个字符串,包含用于生成小于条件的 SQL 语句。
condition
:一个布尔值,用于控制是否应用这个小于条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
ltSql
方法允许你将字段值与 SQL 语句的结果进行比较,这为复杂的查询条件提供了灵活性。
ltSql
方法时,确保
column
参数正确指向了数据库中的字段名或使用
Lambda
表达式的字段名。
inValue
参数应该是一个有效的 SQL 语句,它将直接嵌入到生成的 SQL 中,因此需要确保其安全性和正确性,应避免 SQL 由前端动态入并直接引用。
condition
参数的重载方法。
leSql Since 3.4.3.2
leSql
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,允许你设置一个字段小于等于(LE)某个 SQL 语句的结果。
column
:数据库字段名或使用
Lambda
表达式的字段名。
inValue
:一个字符串,包含用于生成小于等于条件的 SQL 语句。
condition
:一个布尔值,用于控制是否应用这个小于等于条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
leSql
方法允许你将字段值与 SQL 语句的结果进行比较,这为复杂的查询条件提供了灵活性。
leSql
方法时,确保
column
参数正确指向了数据库中的字段名或使用
Lambda
表达式的字段名。
inValue
参数应该是一个有效的 SQL 语句,它将直接嵌入到生成的 SQL 中,因此需要确保其安全性和正确性,应避免 SQL 由前端动态参数传入并直接引用。
condition
参数的重载方法。
groupBy
groupBy
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它用于设置查询结果的分组条件。通过指定一个或多个字段,
groupBy
方法可以生成 SQL 语句中的 GROUP BY 子句。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
columns
:一个可变参数列表,包含用于分组的字段名。
condition
:一个布尔值,用于控制是否应用这个分组条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
groupBy
方法适用于需要对查询结果进行分组的场景。
groupBy
方法时,确保
columns
参数正确指向了数据库中的字段名或使用
Lambda
表达式的字段名。
condition
参数的重载方法。
orderByAsc
orderByAsc
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它用于设置查询结果的升序排序条件。通过指定一个或多个字段,
orderByAsc
方法可以生成 SQL 语句中的 ORDER BY 子句,并指定升序排序。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
columns
:一个可变参数列表,包含用于排序的字段名。
condition
:一个布尔值,用于控制是否应用这个排序条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
orderByAsc
方法适用于需要对查询结果进行升序排序的场景。
orderByAsc
方法时,确保
columns
参数正确指向了数据库中的字段名或使用
Lambda
表达式的字段名。
condition
参数的重载方法。
orderByDesc
orderByDesc
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它用于设置查询结果的降序排序条件。通过指定一个或多个字段,
orderByDesc
方法可以生成 SQL 语句中的 ORDER BY 子句,并指定降序排序。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
columns
:一个可变参数列表,包含用于排序的字段名。
condition
:一个布尔值,用于控制是否应用这个排序条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
orderByDesc
方法适用于需要对查询结果进行降序排序的场景。
orderByDesc
方法时,确保
columns
参数正确指向了数据库中的字段名或使用
Lambda
表达式的字段名。
condition
参数的重载方法。
orderBy
orderBy
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它用于设置查询结果的排序条件。通过指定一个或多个字段以及排序方向(升序或降序),
orderBy
方法可以生成 SQL 语句中的 ORDER BY 子句。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
condition
:一个布尔值,用于控制是否应用这个排序条件。
isAsc
:一个布尔值,表示排序方向。
true
表示升序(ASC),
false
表示降序(DESC)。
columns
:一个可变参数列表,包含用于排序的字段名。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
orderBy
方法提供了更灵活的排序设置,允许开发者指定排序方向。
orderBy
方法时,确保
columns
参数正确指向了数据库中的字段名或使用
Lambda
表达式的字段名。
condition
参数的重载方法。
having
having
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它用于设置 HAVING 子句,通常与 GROUP BY 一起使用,用于对分组后的数据进行条件筛选。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
sqlHaving
:一个字符串,包含用于生成 HAVING 子句的 SQL 语句。
params
:一个可变参数列表,包含 SQL 语句中占位符的替换值。
condition
:一个布尔值,用于控制是否应用这个 HAVING 条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
having
方法通常与
groupBy
方法一起使用,用于对分组后的数据进行进一步的筛选。
having
方法时,确保
sqlHaving
参数是一个有效的 SQL 语句,它将直接嵌入到生成的 SQL 中,因此需要确保其安全性和正确性,应避免 SQL 由前端动态参数传入并直接引用。
params
参数用于替换
sqlHaving
中的占位符,确保提供的参数类型和数量与占位符匹配。
condition
参数的重载方法。
func
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它提供了一种在链式调用中根据条件执行不同查询操作的机制。通过传入一个
Consumer
函数式接口,
func
方法允许你在不中断链式调用的情况下,根据条件执行不同的查询构建逻辑。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
consumer
:一个
Consumer
函数式接口,它接受一个
Children
类型的参数,并可以调用
Children
对象上的方法来构建查询条件。
condition
:一个布尔值,用于控制是否应用这个
Consumer
逻辑。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
func
方法提供了一种灵活的方式来根据条件动态构建查询条件,而不需要中断链式调用。
func
方法时,确保
Consumer
函数式接口中的逻辑正确构建了所需的查询条件。
condition
参数用于控制是否应用
Consumer
逻辑,这允许你根据某些条件动态添加查询条件。
func
方法允许执行复杂的逻辑,因此在使用时需要特别注意代码的可读性和维护性。
or
方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于在查询条件中添加 OR 逻辑。通过调用
or
方法,可以改变后续查询条件的连接方式,从默认的 AND 连接变为 OR 连接。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
condition
:一个布尔值,用于控制是否应用这个 OR 逻辑。
consumer
:一个
Consumer
函数式接口,它接受一个
Param
类型的参数,并可以调用
Param
对象上的方法来构建 OR 嵌套条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
OR 嵌套示例 :
生成的 SQL
or
方法表示紧接着下一个查询条件方法不是用
and
连接,而是用
or
连接。
or
方法,则默认使用
and
连接查询条件。
or
方法可以嵌套使用,通过传入
Consumer
函数式接口来构建复杂的 OR 嵌套条件。
or
方法时,确保
condition
参数正确控制了 OR 逻辑的应用。
or
方法的嵌套使用可以构建复杂的查询逻辑,但需要注意代码的可读性和维护性。
and
方法是 MyBatis-Plus 中用于构建查询条件的基本方法之一,它用于在查询条件中添加 AND 逻辑。通过调用
and
方法,可以创建 AND 嵌套条件,即在一个 AND 逻辑块中包含多个查询条件。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
consumer
:一个
Consumer
函数式接口,它接受一个
Param
类型的参数,并可以调用
Param
对象上的方法来构建 AND 嵌套条件。
condition
:一个布尔值,用于控制是否应用这个 AND 嵌套逻辑。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
and
方法的嵌套使用可以构建复杂的查询逻辑,其中 AND 条件可以包含多个查询条件。
and
方法的嵌套功能时,确保
Consumer
函数式接口中的逻辑正确构建了所需的查询条件。
condition
参数用于控制是否应用
Consumer
逻辑,这允许你根据某些条件动态添加查询条件。
and
方法的嵌套使用可以执行复杂的逻辑,因此在使用时需要特别注意代码的可读性和维护性。
nested
nested
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它用于创建一个独立的查询条件块,不带默认的 AND 或 OR 逻辑。通过调用
nested
方法,可以在查询条件中添加一个嵌套的子句,该子句可以包含多个查询条件,并且可以被外部查询条件通过 AND 或 OR 连接。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
consumer
:一个
Consumer
函数式接口,它接受一个
Param
类型的参数,并可以调用
Param
对象上的方法来构建嵌套的查询条件。
condition
:一个布尔值,用于控制是否应用这个嵌套逻辑。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
nested
方法创建的查询条件块是一个独立的子句,可以被外部查询条件通过 AND 或 OR 连接。
nested
方法时,确保
Consumer
函数式接口中的逻辑正确构建了所需的查询条件。
condition
参数用于控制是否应用
Consumer
逻辑,这允许你根据某些条件动态添加查询条件。
nested
方法可以执行复杂的逻辑,因此在使用时需要特别注意代码的可读性和维护性。
apply
apply
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它允许你直接拼接 SQL 片段到查询条件中。这个方法特别适用于需要使用数据库函数或其他复杂 SQL 构造的场景。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
applySql
:一个字符串,包含要拼接的 SQL 片段。
params
:一个可变参数列表,包含 SQL 片段中占位符的替换值。
condition
:一个布尔值,用于控制是否应用这个 SQL 片段。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
使用参数占位符的示例 :
生成的 SQL
apply
方法可用于拼接包含数据库函数的 SQL 片段。
params
对应
applySql
内部的
{index}
部分,这样是不会有 SQL 注入风险的。如果直接将参数拼接到 SQL 中,则会有 SQL 注入风险,故应避免 SQL 由前端动态参数传入并直接引用。
apply
方法时,确保
applySql
参数是一个有效的 SQL 片段,并且
params
参数正确地替换了占位符。
condition
参数用于控制是否应用这个 SQL 片段,这允许你根据某些条件动态添加查询条件。
last
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它允许你直接在查询的最后添加一个 SQL 片段,而不受 MyBatis-Plus 的查询优化规则影响。这个方法应该谨慎使用,因为它可能会绕过 MyBatis-Plus 的查询优化。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
lastSql
:一个字符串,包含要添加到查询最后的 SQL 片段。
condition
:一个布尔值,用于控制是否应用这个 SQL 片段。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
last
方法只能调用一次,多次调用将以最后一次为准。
last
方法会绕过 MyBatis-Plus 的查询优化规则,可能会导致查询效率降低。
lastSql
参数直接拼接到 SQL 中,所以必须确保输入的 SQL 片段是安全的,即保障
lastSql
应该是后端自行控制,而不是动态参数由前端传入。
last
方法时,确保
lastSql
参数是一个安全的 SQL 片段,并且
condition
参数正确地控制了 SQL 片段的应用。
exists
exists
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它用于在查询中添加一个 EXISTS 子查询。通过调用
exists
方法,可以将一个完整的 SQL 子查询作为 EXISTS 条件添加到主查询中。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
existsSql
:一个字符串,包含要作为 EXISTS 条件的 SQL 子查询。
condition
:一个布尔值,用于控制是否应用这个 EXISTS 条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
exists
方法用于添加一个 EXISTS 子查询,这通常用于检查子查询是否返回任何行。
exists
方法时,确保
existsSql
参数是一个有效的 SQL 子查询,它将直接嵌入到生成的 SQL 中,因此需要确保其安全性和正确性,应避免 SQL 由前端动态参数传入并直接引用。
condition
参数用于控制是否应用 EXISTS 条件,这允许你根据某些条件动态添加查询条件。
exists
方法允许执行复杂的逻辑,因此在使用时需要特别注意代码的可读性和维护性。
notExists
notExists
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它用于在查询中添加一个 NOT EXISTS 子查询。通过调用
notExists
方法,可以将一个完整的 SQL 子查询作为 NOT EXISTS 条件添加到主查询中。
QueryWrapper
LambdaQueryWrapper
UpdateWrapper
LambdaUpdateWrapper
notExistsSql
:一个字符串,包含要作为 NOT EXISTS 条件的 SQL 子查询。
condition
:一个布尔值,用于控制是否应用这个 NOT EXISTS 条件。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
生成的 SQL
notExists
方法用于添加一个 NOT EXISTS 子查询,这通常用于检查子查询是否不返回任何行。
notExists
方法时,确保
notExistsSql
参数是一个有效的 SQL 子查询,它将直接嵌入到生成的 SQL 中,因此需要确保其安全性和正确性,应避免 SQL 由前端动态参数传入并直接引用。
condition
参数用于控制是否应用 NOT EXISTS 条件,这允许你根据某些条件动态添加查询条件。
notExists
方法允许执行复杂的逻辑,因此在使用时需要特别注意代码的可读性和维护性。
select
select
方法是 MyBatis-Plus 中用于构建查询条件的高级方法之一,它用于设置查询的字段。通过调用
select
方法,可以指定在查询结果中包含哪些字段,从而实现字段级别的查询定制。
QueryWrapper
LambdaQueryWrapper
sqlSelect
:一个字符串数组,包含要查询的字段名。
predicate
:一个
Predicate
函数式接口,用于过滤查询字段。它接受一个
TableFieldInfo
类型的参数,并返回一个布尔值,表示是否选择该字段。
entityClass
:实体类的类型,用于获取字段信息。
普通 Wrapper (
QueryWrapper
)
:
Lambda Wrapper (
LambdaQueryWrapper
)
:
使用 Predicate 过滤字段的示例 :
生成的 SQL
select
方法分为两类:第一类直接指定要查询的字段名,第二类通过
Predicate
过滤字段。
entityClass
,则在调用前需要确保
wrapper
内的
entity
属性有值。
select
方法时,确保指定的字段名或过滤条件正确,以避免查询结果不符合预期。
set
方法是 MyBatis-Plus 中用于构建更新操作的高级方法之一,它用于设置更新语句中的 SET 字段。通过调用
set
方法,可以指定在更新操作中要修改的字段及其新值。
UpdateWrapper
LambdaUpdateWrapper
column
:数据库字段名或使用
Lambda
表达式的字段名。
condition
:一个布尔值,用于控制是否应用这个 SET 字段。
val
:一个对象,表示要更新到字段的新值。
mapping
:额外指定,例如:
javaType=int,jdbcType=NUMERIC,typeHandler=xxx.xxx.MyTypeHandler
普通 Wrapper (
UpdateWrapper
)
:
Lambda Wrapper (
LambdaUpdateWrapper
)
:
生成的 SQL
使用条件控制的示例 :
生成的 SQL
set
方法用于设置更新语句中的 SET 字段,可以指定要更新的字段及其新值。
val
参数为空字符串时,数据库字段值将变为空字符串。
val
参数为
null
时,数据库字段值将变为
null
。
condition
参数用于控制是否应用这个 SET 字段,这允许你根据某些条件动态添加更新字段。
set
方法时,确保
column
参数是一个有效的字段名,并且
val
参数是一个合适的新值。
setSql
setSql
方法是 MyBatis-Plus 中用于构建更新操作的高级方法之一,它允许你直接设置更新语句中的 SET 部分 SQL。通过调用
setSql
方法,可以将一个自定义的 SQL 片段作为 SET 子句添加到更新语句中。
UpdateWrapper
LambdaUpdateWrapper
setSql
:一个字符串,包含要作为 SET 子句的 SQL 片段。
condition
:一个布尔值,用于控制是否应用这个 SET 字段。
params
:一个可变参数列表,包含 SQL 片段中占位符的替换值。
setSql
方法用于设置更新语句中的 SET 部分 SQL,这通常用于需要使用复杂 SQL 构造的场景。
setSql
方法时,确保
sql
参数是一个有效的 SQL 片段,它将直接嵌入到生成的 SQL 中,因此需要确保其安全性和正确性,应避免 SQL 由前端动态参数传入并直接引用
setSql
方法允许执行复杂的逻辑,因此在使用时需要特别注意代码的可读性和维护性。
setIncrBy Since 3.5.6
setIncrBy
方法是 MyBatis-Plus 中用于更新操作的高级方法之一,它允许你指定一个字段,并使其在数据库中的值增加指定的数值。这个方法特别适用于需要对数值字段进行增量操作的场景。
LambdaUpdateWrapper
column
:一个
SFunction
对象,表示要自增的字段。
val
:一个
Number
对象,表示要增加的数值。
condition
(可选):一个布尔值,表示是否在满足条件时执行自增操作。
普通 Wrapper (
UpdateWrapper
)
:
Lambda Wrapper (
LambdaUpdateWrapper
)
:
生成的 SQL
setIncrBy
方法用于对指定字段进行自增操作,这通常用于需要对数值字段进行增量更新的场景。
setIncrBy
方法时,确保
column
参数是一个有效的字段表达式,
val
参数是一个有效的数值。
condition
参数,则只有在条件为
true
时才会执行自增操作。
setDecrBy Since 3.5.6
setDecrBy
方法是 MyBatis-Plus 中用于更新操作的高级方法之一,它允许你指定一个字段,并使其在数据库中的值减少指定的数值。这个方法特别适用于需要对数值字段进行减量操作的场景。
LambdaUpdateWrapper
column
:一个
SFunction
对象,表示要自减的字段。
val
:一个
Number
对象,表示要减少的数值。
condition
(可选):一个布尔值,表示是否在满足条件时执行自减操作。
普通 Wrapper (
UpdateWrapper
)
:
Lambda Wrapper (
LambdaUpdateWrapper
)
:
生成的 SQL
setDecrBy
方法用于对指定字段进行自减操作,这通常用于需要对数值字段进行减量更新的场景。
setDecrBy
方法时,确保
column
参数是一个有效的字段表达式,
val
参数是一个有效的数值。
condition
参数,则只有在条件为
true
时才会执行自减操作。
lambda
lambda
方法是一个便捷的方法,它允许你从
QueryWrapper
或
UpdateWrapper
对象中获取对应的
LambdaQueryWrapper
或
LambdaUpdateWrapper
对象。这样,你就可以使用 Lambda 表达式来构建查询或更新条件,使得代码更加简洁和类型安全。
QueryWrapper
UpdateWrapper
从 QueryWrapper 获取 LambdaQueryWrapper :
从 UpdateWrapper 获取 LambdaUpdateWrapper :
lambda
方法返回一个
LambdaWrapper
对象,具体类型取决于调用它的
Wrapper
类型。
QueryWrapper
上调用
lambda
方法将返回一个
LambdaQueryWrapper
。
UpdateWrapper
上调用
lambda
方法将返回一个
LambdaUpdateWrapper
。
lambda
方法时,确保你已经正确地初始化了
QueryWrapper
或
UpdateWrapper
对象。
LambdaWrapper
对象,你就可以使用 Lambda 表达式来构建查询或更新条件,这将使得代码更加类型安全和易于维护。
使用 TypeHandler
在
wrapper
中使用
typeHandler
需要特殊处理利用
formatSqlMaybeWithParam
方法
通过使用 MyBatis-Plus 的 Wrapper 条件构造器,开发者可以更加高效地构建复杂的数据库查询条件,同时保持代码的简洁性和安全性。以下是一些注意事项与推荐做法:
and
、
or
等逻辑操作符。
eq
、
apply
等方法,它们会自动处理参数绑定,避免 SQL 注入风险。
Wrappers
MyBatis-Plus 提供了
Wrappers
类,它是一个静态工厂类,用于快速创建
QueryWrapper
、
UpdateWrapper
、
LambdaQueryWrapper
和
LambdaUpdateWrapper
的实例。使用
Wrappers
可以减少代码量,提高开发效率。
QueryWrapper
UpdateWrapper
查询 设置
条件字段部分
一定要保证安全,避免 SQL 注入攻击。
前端
传入的
SQL片段
都要
严格过滤
更多查看
数据安全保护
预防安全漏洞
线程安全性
Wrapper 实例不是线程安全的,因此建议在每次使用时创建新的 Wrapper 实例。这样可以避免多线程环境下的数据竞争和潜在的错误。
通过遵循这些最佳实践,开发者可以更加安全、高效地使用 MyBatis-Plus 的 Wrapper 条件构造器,构建出既安全又易于维护的数据库操作代码。
使用 Wrapper 自定义 SQL
MyBatis-Plus 提供了强大的 Wrapper 条件构造器,允许开发者自定义 SQL 语句,以满足更复杂的数据库查询需求。为了使用这一功能,请确保你的
mybatis-plus
版本不低于
3.0.7
。
mybatis-plus
版本至少为
3.0.7
,以支持自定义 SQL 功能。
ew
,或者使用注解
@Param(Constants.WRAPPER)
明确指定参数为 Wrapper 对象。
${ew.customSqlSegment}
:在 SQL 语句中,使用
${ew.customSqlSegment}
来引用 Wrapper 对象生成的 SQL 片段。
以下是一个使用 Wrapper 自定义 SQL 的示例:
在上述示例中,我们定义了一个
selectByCustomSql
方法,它使用了一个自定义的 SQL 语句,并通过
${ew.customSqlSegment}
引入了 Wrapper 对象生成的 SQL 片段。
要使用自定义 SQL,只需调用上述方法并传入一个 Wrapper 对象:
在这个例子中,
selectByCustomSql
方法将执行一个带有 where 条件的查询,该条件由传入的
queryWrapper
对象生成。
通过这种方式,你可以灵活地结合 MyBatis-Plus 的 Wrapper 功能和自定义 SQL,以满足各种复杂的数据库操作需求。
Kotlin持久化对象定义最佳实践
在Kotlin中定义持久化对象时,我们应当遵循一些最佳实践,以确保代码的清晰性和可维护性。以下是一个使用MyBatis-Plus的示例,展示了如何定义一个持久化对象:
注意
:上述代码中的
@TableId
和
@TableField
注解是为了展示MyBatis-Plus的使用,并非必须。所有成员变量都应定义为可空类型,并赋予初始值
null
,以便在类似Java中的
updateSelective
场景中使用。
不推荐使用
data class
或全参数构造方法,因为这可能导致在创建空对象时需要提供不必要的
null
值。
使用注解查询
使用XML配置查询
Kotlin中使用Wrapper
Kotlin支持
QueryWrapper
和
UpdateWrapper
,但不支持
LambdaQueryWrapper
和
LambdaUpdateWrapper
。如果需要使用Lambda风格的Wrapper,可以使用
KtQueryWrapper
和
KtUpdateWrapper
。
参考示例:
链式调用与Lambda式调用
MyBatis-Plus提供了两种风格的链式调用:普通链式调用和Lambda式链式调用。需要注意的是,Lambda式链式调用不支持Kotlin。