邏輯删除
第一步:配置
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
說明
- 邏輯删除是為了友善資料恢複和保護資料本身價值等等的一種方案,但實際就是删除。
- 如果你需要頻繁查出來看就不應使用邏輯删除,而是以一個狀态去表示