md_files/自学/草稿.md

44 lines
2.0 KiB
Markdown
Raw Normal View History

主要区别在于它们的**用途**和**能执行的操作**不同:
| 特性 | `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()`(逻辑删除) |
------
### 举例对比
1. **查询:`lambdaQuery()`**
```java
// 查出状态为 1名字中含 “张”,并按年龄降序的前 10 条用户
List<User> 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` 方法引用,保证 **类型安全**、**重构无忧**。