主要区别在于它们的用途和能执行的操作不同:
特性 | lambdaQuery() |
lambdaUpdate() |
---|---|---|
主要用途 | 构造查询条件,执行 SELECT 操作 |
构造更新条件,执行 UPDATE (或逻辑删除)操作 |
返回类型 | LambdaQueryChainWrapper<T> 或 LambdaQueryWrapper<T> |
LambdaUpdateChainWrapper<T> 或 LambdaUpdateWrapper<T> |
支持的方法 | .eq() , .like() , .gt() , .orderBy() , .select() 等 |
.eq() , .lt() , .set() , .setSql() 等 |
执行方法 | .list() , .one() , .page() 等 |
.update() , .remove() (逻辑删除) |
举例对比
-
查询:
lambdaQuery()
// 查出状态为 1,名字中含 “张”,并按年龄降序的前 10 条用户 List<User> list = userService.lambdaQuery() .eq(User::getStatus, 1) .like(User::getName, "张") .orderByDesc(User::getAge) .last("LIMIT 10") .list();
-
更新:
lambdaUpdate()
// 把状态为 0,且注册时间超过两年的用户标记为状态 2 boolean ok = userService.lambdaUpdate() .eq(User::getStatus, 0) .lt(User::getRegisterTime, LocalDate.now().minusYears(2)) .set(User::getStatus, 2) .update();
小结
- 用
lambdaQuery()
构造查询条件,只做 读 操作。 - 用
lambdaUpdate()
构造更新条件,结合.set()
指定要修改的字段,做 改(或 “逻辑删”)操作。
它们都是为了解决写 SQL 时硬编码字段名的问题,通过 User::getXxx
方法引用,保证 类型安全、重构无忧。