LambdaUpdateWrapper的使用及说明

 更新时间:2026年04月10日 10:49:28   作者:Flying_Fish_Xuan  
`LambdaUpdateWrapper`是MyBatis-Plus用于构建更新操作条件的便捷工具,支持Lambda表达式简化条件编写,提供多种比较和聚合查询方法,通过示例展示了如何使用`eq`、`like`、`count`等方法构建查询条件并执行更新操作

LambdaUpdateWrapper的使用

`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<>();
wrapper.eq("age", 18);
List<User> userList = userMapper.selectList(wrapper);

使用gele比较运算符的例子:

// 查询年龄在18-30之间的用户信息
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.ge("age", 18).le("age", 30);
List<User> userList = userMapper.selectList(wrapper);

在以上例子中,QueryWrapper对象的方法eqgele分别表示使用等于、大于等于、小于等于比较运算符进行条件查询。

模糊查询(`like`、`notLike`)

模糊查询是一种常见的查询方式,可以通过 likenotLike 操作符来实现。在使用 MybatisPlus 进行模糊查询时,可以使用 Wrapper 类来构建查询条件。

下面是各个比较运算符的含义:

  • %value%:匹配任意位置包含指定字符的字符串。
  • %value:匹配以指定字符结尾的字符串。
  • value%:匹配以指定字符开头的字符串。
  • _value_:匹配指定字符在任意位置的字符串。
  • _value:匹配指定字符在最后一个位置的字符串。
  • value_:匹配指定字符在第一个位置的字符串。

使用 MybatisPlus 进行模糊查询的示例代码如下:

// 模糊查询
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.like("name", "张"); // 查询名字包含“张”的用户
wrapper.notLike("phone", "123"); // 查询电话号码不包含“123”的用户
List<User> userList = userMapper.selectList(wrapper);

上述代码中,like 方法用于匹配名字中包含“张”的用户,notLike 方法用于匹配电话号码中不包含“123”的用户。

需要注意的是,模糊查询可能会影响查询效率,因此应尽量在有必要的情况下使用模糊查询。

聚合查询(`count`、`sum`、`avg`、`max`、`min`)

在 Mybatis-Plus 中,聚合查询可以通过 QueryWrapper 或 LambdaQueryWrapper 进行操作,常用的聚合函数有 countsumavgmaxmin

下面是一些示例代码:

使用 count 查询符合条件的记录数:

int count = userService.count(new QueryWrapper<User>()
    .eq("age", 18)
    .like("name", "张")
);

使用 sum 查询某个字段的总和:

BigDecimal sum = userService.getBaseMapper().selectObjs(new LambdaQueryWrapper<User>()
    .eq(User::getGender, "男")
).stream().map(User::getSalary).reduce(BigDecimal.ZERO, BigDecimal::add);

使用 avg 查询某个字段的平均值:

Double avg = userService.getBaseMapper().selectObjs(new LambdaQueryWrapper<User>()
    .between(User::getBirthday, LocalDate.of(1990, 1, 1), LocalDate.of(2000, 1, 1))
).stream().mapToDouble(User::getAge).average().orElse(0);

使用 max 查询某个字段的最大值:

LocalDate max = userService.getBaseMapper().selectObjs(new QueryWrapper<User>()
    .select("max(birthday) as maxBirthday")
).stream().map(obj -> ((Date)obj[0]).toLocalDate()).findAny().orElse(null);

使用 min 查询某个字段的最小值:

LocalDate min = userService.getBaseMapper().selectObjs(new LambdaQueryWrapper<User>()
    .ge(User::getAge, 18)
    .isNotNull(User::getBirthday)
).stream().map(User::getBirthday).min(LocalDate::compareTo).orElse(null);

还可以链式调用多个条件方法来组合条件。

例如,可以使用以下方式来构建查询条件:

templateWrapper.eq(MessageTemplate::getType, "SMS") // 等于条件
    .likeRight(MessageTemplate::getContent, "Hello") // 右模糊查询
    .ge(MessageTemplate::getCreateTime, LocalDateTime.now().minusDays(7)) // 大于等于条件
    .orderByAsc(MessageTemplate::getPriority); // 升序排序条件

最后,使用构建好的 `LambdaUpdateWrapper` 对象来执行相应的数据库更新操作,例如使用 `update()` 方法来更新数据库中的记录。

总而言之

LambdaUpdateWrapper类是 MyBatis-Plus 框架提供的一种便捷方式,可用于通过Lambda表达式构建数据库更新操作的条件查询对象。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java读取http请求中的body实例代码

    java读取http请求中的body实例代码

    下面小编就为大家带来一篇java读取http请求中的body实例代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • Java使用嵌套循环模拟ATM机取款业务操作示例

    Java使用嵌套循环模拟ATM机取款业务操作示例

    这篇文章主要介绍了Java使用嵌套循环模拟ATM机取款业务操作,结合实例形式分析了Java模拟ATM机取款业务操作的相关流程控制、数值判断等操作技巧,需要的朋友可以参考下
    2019-11-11
  • 使用jmeter实现对jar包的调用方式

    使用jmeter实现对jar包的调用方式

    这篇文章主要介绍了使用jmeter实现对jar包的调用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • JAVA 根据身份证计算年龄的实现代码

    JAVA 根据身份证计算年龄的实现代码

    这篇文章主要介绍了JAVA 根据身份证计算年龄的实例代码及java根据出生日期获得年龄的方法,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-05-05
  • Mybatis开发要点-resultType和resultMap有什么区别详解

    Mybatis开发要点-resultType和resultMap有什么区别详解

    本文主要介绍了Mybatis开发要点-resultType和resultMap有什么区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • IDEA搭建SpringBoot多模块聚合工程过程详解(多模块聚合工程)

    IDEA搭建SpringBoot多模块聚合工程过程详解(多模块聚合工程)

    这篇文章主要是介绍一下,如何在IDEA开发工具下,搭建一个基于SpringBoot的多模块聚合工程项目,本篇文章,将项目模块细分为几个子工程模块,在文中给大家详细介绍过,对IDEA搭建SpringBoot多模块聚合工程感兴趣的朋友一起看看吧
    2022-04-04
  • SpringBoot使用token简单鉴权的具体实现方法

    SpringBoot使用token简单鉴权的具体实现方法

    这篇文章主要介绍了SpringBoot使用token简单鉴权的具体实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • spring cloud alibaba Nacos 注册中心搭建过程详解

    spring cloud alibaba Nacos 注册中心搭建过程详解

    这篇文章主要介绍了spring cloud alibaba Nacos 注册中心搭建过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 对SpringBoot项目Jar包进行加密防止反编译的方案

    对SpringBoot项目Jar包进行加密防止反编译的方案

    最近项目要求部署到其他公司的服务器上,但是又不想将源码泄露出去,要求对正式环境的启动包进行安全性处理,防止客户直接通过反编译工具将代码反编译出来,本文介绍了如何对SpringBoot项目Jar包进行加密防止反编译,需要的朋友可以参考下
    2024-08-08
  • IDEA 下 Gradle 删除多余无用依赖的处理方法

    IDEA 下 Gradle 删除多余无用依赖的处理方法

    这篇文章主要介绍了IDEA下Gradle删除多余无用依赖,使用该插件可以一定程度上帮助我们删除无用依赖,但是也可能会多删除有用的依赖,需要在使用插件自动修复后手动检测项目,验证是否会出现问题,避免导致上线发布错误的负优化
    2022-03-03

最新评论