mybatis-flex/docs/zh/logic_delete.md
2023-03-04 17:36:57 +08:00

58 lines
1.6 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.

# 逻辑删除
## 逻辑删除简介
逻辑删除指的是在删除数据的时候并非真正的去删除而是将表中列所对应的状态字段status做修改操作
实际上并未删除目标数据。
我们可以在做表的字段设计的时候,用一个列表标识该数据的 "删除状态",在 mybatis-flex 中,正常状态的值为 0 已删除
的值为 1。
## Mybatis-Flex 逻辑删除示例
假设在 tb_account 表中,存在一个为 is_deleted 的字段,用来标识该数据的逻辑删除,那么 tb_account 表
对应的 "Account.java" 实体类应该配置如下:
```java
@Table("tb_account")
public class Account {
@Column(isLogicDelete = true)
private Boolean isDelete;
//Getter Setter...
}
```
此时,当我们执行如下的删除代码是:
```java
accountMapper.deleteById(1);
```
Mybatis 执行的 SQL 如下:
```sql
UPDATE `tb_account` SET `is_delete` = 1
WHERE `id` = ? AND `is_delete` = 0
```
可以看出,当执行 deleteById 时Mybatis 只是进行了 update 操作,而非 delete 操作。
## 注意事项
当 "tb_account" 的数据被删除时( is_delete = 1 时),我们通过 Mybatis-Flex 的 selectOneById 去查找数据时,会查询不到数据。
原因是 `selectOneById` 会自动添加上 `is_delete = 0` 条件,执行的 sql 如下:
```java
SELECT * FROM tb_account where id = ? and is_delete = 0
```
不仅仅是 selectOneById 方法会添加 `is_delete = 0` 条件BaseMapper 的以下方法也都会添加该条件:
- selectOneByMap
- selectOneByQuery
- selectListByIds
- selectListByMap
- selectListByQuery
- selectCountByQuery
- paginate