`LambdaUpdateWrapper` 是 MyBatis-Plus 框架中的一个类,用于构建数据库更新操作的条件查询对象。它提供了一种使用Lambda表达式来构建查询条件的便捷方式。
`LambdaUpdateWrapper` 类是 `UpdateWrapper` 类的子类,它使用了Java 8的Lambda表达式语法来简化查询条件的编写过程。通过使用Lambda表达式,你可以直接引用实体类的属性名而不需要手动编写字符串常量,这样可以提高代码的可读性和维护性。
以代码示例来解释:
LambdaUpdateWrapper<MessageTemplate> templateWrapper = new LambdaUpdateWrapper<>();
在这个例子中,我们创建了一个 `LambdaUpdateWrapper` 对象,并指定了泛型类型为 `MessageTemplate`,表示该条件查询对象用于更新 `MessageTemplate` 实体类对应的数据库表。
通过 `LambdaUpdateWrapper` 对象,你可以使用内置的方法来构建查询条件,
比较运算符(`eq`、`ne`、`gt`、`lt`、`ge`、`le`)
比较运算符是用于比较两个值的符号,常用于条件语句和循环语句中。
以下是每个比较运算符在Java中的含义:
-
eq
:等于,表示两个值相等。 -
ne
:不等于,表示两个值不相等。 -
gt
:大于,表示第一个值比第二个值大。 -
lt
:小于,表示第一个值比第二个值小。 -
ge
:大于等于,表示第一个值大于等于第二个值。 -
le
:小于等于,表示第一个值小于等于第二个值。
在MyBatis Plus中,用于构建查询条件的Wrapper类提供了对应的方法来使用比较运算符。例如,使用eq
比较运算符的例子:
// 查询年龄等于18的用户信息
QueryWrapper<User> wrapper = new QueryWrapper<>();
("age", 18);
List<User> userList = (wrapper);
使用ge
和le
比较运算符的例子:
// 查询年龄在18-30之间的用户信息
QueryWrapper<User> wrapper = new QueryWrapper<>();
("age", 18).le("age", 30);
List<User> userList = (wrapper);
在以上例子中,QueryWrapper
对象的方法eq
、ge
、le
分别表示使用等于、大于等于、小于等于比较运算符进行条件查询。
模糊查询(`like`、`notLike`)
模糊查询是一种常见的查询方式,可以通过 like
和 notLike
操作符来实现。在使用 MybatisPlus 进行模糊查询时,可以使用 Wrapper
类来构建查询条件。
下面是各个比较运算符的含义:
-
%value%
:匹配任意位置包含指定字符的字符串。 -
%value
:匹配以指定字符结尾的字符串。 -
value%
:匹配以指定字符开头的字符串。 -
_value_
:匹配指定字符在任意位置的字符串。 -
_value
:匹配指定字符在最后一个位置的字符串。 -
value_
:匹配指定字符在第一个位置的字符串。
使用 MybatisPlus 进行模糊查询的示例代码如下:
// 模糊查询
QueryWrapper<User> wrapper = new QueryWrapper<>();
("name", "张"); // 查询名字包含“张”的用户
("phone", "123"); // 查询电话号码不包含“123”的用户
List<User> userList = (wrapper);
上述代码中,like
方法用于匹配名字中包含“张”的用户,notLike
方法用于匹配电话号码中不包含“123”的用户。
需要注意的是,模糊查询可能会影响查询效率,因此应尽量在有必要的情况下使用模糊查询。
聚合查询(`count`、`sum`、`avg`、`max`、`min`)
在 Mybatis-Plus 中,聚合查询可以通过 QueryWrapper 或 LambdaQueryWrapper 进行操作,常用的聚合函数有 count
、sum
、avg
、max
、min
。
下面是一些示例代码:
使用 count 查询符合条件的记录数:
int count = (new QueryWrapper<User>()
.eq("age", 18)
.like("name", "张")
);
使用 sum 查询某个字段的总和:
BigDecimal sum = ().selectObjs(new LambdaQueryWrapper<User>()
.eq(User::getGender, "男")
).stream().map(User::getSalary).reduce(, BigDecimal::add);
使用 avg 查询某个字段的平均值:
Double avg = ().selectObjs(new LambdaQueryWrapper<User>()
.between(User::getBirthday, (1990, 1, 1), (2000, 1, 1))
).stream().mapToDouble(User::getAge).average().orElse(0);
使用 max 查询某个字段的最大值:
LocalDate max = ().selectObjs(new QueryWrapper<User>()
.select("max(birthday) as maxBirthday")
).stream().map(obj -> ((Date)obj[0]).toLocalDate()).findAny().orElse(null);
使用 min 查询某个字段的最小值:
LocalDate min = ().selectObjs(new LambdaQueryWrapper<User>()
.ge(User::getAge, 18)
.isNotNull(User::getBirthday)
).stream().map(User::getBirthday).min(LocalDate::compareTo).orElse(null);
还可以链式调用多个条件方法来组合条件。
例如,可以使用以下方式来构建查询条件:
(MessageTemplate::getType, "SMS") // 等于条件
.likeRight(MessageTemplate::getContent, "Hello") // 右模糊查询
.ge(MessageTemplate::getCreateTime, ().minusDays(7)) // 大于等于条件
.orderByAsc(MessageTemplate::getPriority); // 升序排序条件
最后,使用构建好的 `LambdaUpdateWrapper` 对象来执行相应的数据库更新操作,例如使用 `update()` 方法来更新数据库中的记录。
总而言之,LambdaUpdateWrapper类是 MyBatis-Plus 框架提供的一种便捷方式,可用于通过Lambda表达式构建数据库更新操作的条件查询对象。