Lambda 查询/修改

本文介绍了MyBatis-Plus框架中LambdaQueryWrapper和LambdaUpdateWrapper的使用,强调了Lambda表达式的优点,如更简洁的语法、更好的类型安全性和可读性,以及在查询和更新操作中的应用实例。
摘要由CSDN通过智能技术生成

同属于mybatis-plus lambda的方式(LambdaQueryWrapper,LambdaUpdateWrapper)比起之前用的(updateWrapper和QueryWrapper)好太多了,我更喜欢将字段名隐藏起来。

就如同:

wrapper.ge("age", 18).le("age", 30);
和
wrapper.gt(User::getAge, 18);
的区别
相对于前者  我更喜欢后者

一、引入依赖


在pom.xml文件中引入MyBatis-Plus的依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>x.x.x</version>
</dependency>

二、创建LambdaQueryWrapper对象


创建LambdaQueryWrapper对象时,需要指定实体类的Class类型,如:

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
或者
LambdaQueryWrapper<User> lambdaQueryWrapper= Wrappers.lambdaQuery();
或者
LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
或者
LambdaUpdateWrapper<User> lambdaUpdateWrapper = Wrappers.lambdaUpdate();

三、LambdaQueryWrapper 详细解释

1.比较运算符(`eq`、`ne`、`gt`、`lt`、`ge`、`le`)

比较运算符是用于比较两个值的符号,常用于条件语句和循环语句中。

以下是每个比较运算符在Java中的含义:

eq:等于,表示两个值相等。

ne:不等于,表示两个值不相等。

gt:大于,表示第一个值比第二个值大。

lt:小于,表示第一个值比第二个值小。

ge:大于等于,表示第一个值大于等于第二个值。

le:小于等于,表示第一个值小于等于第二个值。

在MyBatis Plus中,用于构建查询条件的Wrapper类提供了对应的方法来使

用比较运算符。例如,

1).使用eq比较运算符的例子:
// 查询年龄等于18的用户信息
LambdaQueryWrapper<User> lambdaQueryWrapper= Wrappers.lambdaQuery();
wrapper.eq(User::getAge, 18);
List<User> userList = userMapper.selectList(wrapper);
2).使用 ge 和 le 比较运算符的例子:
// 查询年龄在18-30之间的用户信息
LambdaQueryWrapper<User> lambdaQueryWrapper= Wrappers.lambdaQuery();
wrapper.ge(User::getAge, 18).le(User::getAge, 30);
List<User> userList = userMapper.selectList(wrapper);

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

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

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

%value%:匹配任意位置包含指定字符的字符串。

%value:匹配以指定字符结尾的字符串。

value%:匹配以指定字符开头的字符串。

_value_:匹配指定字符在任意位置的字符串。

_value:匹配指定字符在最后一个位置的字符串。

value_:匹配指定字符在第一个位置的字符串。

1).使用 MybatisPlus 进行模糊查询的示例代码如下:
// 模糊查询
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.like(User::getName, "张"); // 查询名字包含“张”的用户
wrapper.notLike(User::getPhone, "123"); // 查询电话号码不包含“123”的用户
List<User> userList = userMapper.selectList(wrapper);

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

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

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

在 Mybatis-Plus 中,聚合查询可以通过 QueryWrapper 或 LambdaQueryWrapper 进行操作,常用的聚合函数有 count、sum、avg、max、min。

下面是一些示例代码:

1).使用 count 查询符合条件的记录数:
int count = userService.count(new LambdaQueryWrapper<User>()
    .eq(User::getAge, 18)
    .like(User::getName, "张")
);
2).使用 sum 查询某个字段的总和:
BigDecimal sum = userService.getBaseMapper().selectObjs(new LambdaQueryWrapper<User>()
    .eq(User::getGender, "男")
).stream().map(User::getSalary).reduce(BigDecimal.ZERO, BigDecimal::add);
3).使用 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);
4).使用 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);
5).还可以链式调用多个条件方法来组合条件。

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

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表达式构建数据库更新操作的条件查询对象。

四、LambdaUpdateWrapper的解答

而`LambdaUpdateWrapper`则可以使用Lambda表达式构造查询条件,不需要手动指定字段名,具有更高的类型安全性和代码的可读性,如:

LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(User::getName, "Tom")
                   .gt(User::getAge, 18)
                   .set(User::getEmail, "tom@example.com");

另外,`LambdaUpdateWrapper`还可以通过方法`setSql`来添加自定义的SQL语句,如:

LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(User::getName, "Tom")
                   .setSql("age = age + 1");

综上所述,`LambdaUpdateWrapper`具有更加简洁、类型安全、灵活的优势,在日常开发中更常用。

五、相关链接:

1.http://t.csdnimg.cn/uhuHd

2.http://t.csdnimg.cn/qmnNR

  • 27
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1+1=∞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值