MyBatis-Plus 擴展-邏輯刪除

2022-03-25 13:48 更新

說明:

只對自動注入的 sql 起效:

  • 插入: 不作限制
  • 查找: 追加 ?where條件過濾掉已刪除數(shù)據(jù),且使用 ?wrapper.entity? 生成的 where 條件會忽略該字段
  • 更新: 追加 ?where條件防止更新到已刪除數(shù)據(jù),且使用 wrapper.entity 生成的 where 條件會忽略該字段
  • 刪除: 轉(zhuǎn)變?yōu)?nbsp;更新

例如:

  • 刪除: ?update user set deleted=1 where id = 1 and deleted=0 ?
  • 查找: ?select id,name,deleted from user where deleted=0 ?

字段類型支持說明:

  • 支持所有數(shù)據(jù)類型(推薦使用 ?Integer?,?Boolean?,?LocalDateTime?)
  • 如果數(shù)據(jù)庫字段使用?datetime?,邏輯未刪除值和已刪除值支持配置為字符串?null?,另一個值支持配置為函數(shù)來獲取值如?now() ?

附錄:

  • 邏輯刪除是為了方便數(shù)據(jù)恢復(fù)和保護數(shù)據(jù)本身價值等等的一種方案,但實際就是刪除。
  • 如果你需要頻繁查出來看就不應(yīng)使用邏輯刪除,而是以一個狀態(tài)去表示。

使用方法

步驟 1

  • 配置?com.baomidou.mybatisplus.core.config.GlobalConfig$DbConfig?

例如: ?application.yml?

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: flag # 全局邏輯刪除的實體字段名(since 3.3.0,配置后可以忽略不配置步驟2)
      logic-delete-value: 1 # 邏輯已刪除值(默認(rèn)為 1)
      logic-not-delete-value: 0 # 邏輯未刪除值(默認(rèn)為 0)

步驟 2

  • 實體類字段上加上?@TableLogic?注解
@TableLogic
private Integer deleted;

常見問題

1. 如何 insert ?

  • 字段在數(shù)據(jù)庫定義默認(rèn)值(推薦)
  • ?insert前自己 ?set
  • 使用 自動填充功能

2. 刪除接口自動填充功能失效

  • 使用 ?update方法并: ?UpdateWrapper.set(column, value)?(推薦)
  • 使用 ?update方法并: ?UpdateWrapper.setSql("column=value") ?
  • 使用 Sql 注入器 注入 ?com.baomidou.mybatisplus.extension.injector.methods.LogicDeleteByIdWithFill? 并使用(推薦)


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號