主要区别在于它们的**用途**和**能执行的操作**不同: | 特性 | `lambdaQuery()` | `lambdaUpdate()` | | -------------- | --------------------------------------------------------- | --------------------------------------------------------- | | **主要用途** | 构造查询条件,执行 `SELECT` 操作 | 构造更新条件,执行 `UPDATE`(或逻辑删除)操作 | | **返回类型** | `LambdaQueryChainWrapper` 或 `LambdaQueryWrapper` | `LambdaUpdateChainWrapper` 或 `LambdaUpdateWrapper` | | **支持的方法** | `.eq()`, `.like()`, `.gt()`, `.orderBy()`, `.select()` 等 | `.eq()`, `.lt()`, `.set()`, `.setSql()` 等 | | **执行方法** | `.list()`, `.one()`, `.page()` 等 | `.update()`, `.remove()`(逻辑删除) | ------ ### 举例对比 1. **查询:`lambdaQuery()`** ```java // 查出状态为 1,名字中含 “张”,并按年龄降序的前 10 条用户 List list = userService.lambdaQuery() .eq(User::getStatus, 1) .like(User::getName, "张") .orderByDesc(User::getAge) .last("LIMIT 10") .list(); ``` 2. **更新:`lambdaUpdate()`** ```java // 把状态为 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` 方法引用,保证 **类型安全**、**重构无忧**。