逻辑删除
第一步:配置
mybatis-plus:
global-config:
db-config:
logic-delete-field: isDeleted #实体名称
logic-delete-value: 1 # 已经删除标志值
logic-not-delete-value: 0 #未删除标志值
第二步:数据库
字段类型支持说明:
- 支持所有数据类型(推荐使用 Integer,Boolean,LocalDateTime)
- 如果数据库字段使用datetime,逻辑未删除值和已删除值支持配置为字符串null,另一个值支持配置为函数来获取值如now()**
第三步:实体@TableLogic标记字段
@TableLogic
private Integer isDeleted;
此时,基本配置已经完成,但是当inset的时候我们发现其数据上is_deleted字段为空。显然,我们逻辑删除对insert并不会自动填充
下面是官方给出的解决方案:
- 字段在数据库定义默认值**(推荐)**
- insert 前自己 set 值
- 使用自动填充功能
配置完后,我们再进行insert delete select都成功,即:
- 查找: 追加where条件过滤掉已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
- 更新: 追加where条件防止更新到已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
- 删除: 转变为 更新,将is_deleted字段设置为删除值1
说明
- 逻辑删除是为了方便数据恢复和保护数据本身价值等等的一种方案,但实际就是删除。
- 如果你需要频繁查出来看就不应使用逻辑删除,而是以一个状态去表示