md_files/自学/草稿.md

44 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

主要区别在于它们的**用途**和**能执行的操作**不同:
| 特性 | `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` 方法引用,保证 **类型安全**、**重构无忧**。