概念:

邏輯刪除,可以方便地實現對數據庫記錄的邏輯刪除而不是物理刪除。邏輯刪除是指通過更改記錄的狀態或添加標記字段來模擬刪除操作,從而保留了刪除前的數據,便於後續的數據分析和恢復。

  • 物理刪除:真實刪除,將對應數據從數據庫中刪除,之後查詢不到此條被刪除的數據
  • 邏輯刪除:假刪除,將對應數據中代表是否被刪除字段的狀態修改為“被刪除狀態”,之後在數據庫中仍舊能看到此條數據記錄

邏輯刪除實現:

  1. 數據庫和實體類添加邏輯刪除字段
  1. 表添加邏輯刪除字段
    可以是一個布爾類型、整數類型或枚舉類型。
ALTER TABLE USER ADD deleted INT DEFAULT 0 ;  # int 類型 1 邏輯刪除 0 未邏輯刪除
2. 實體類添加邏輯刪除屬性
@Data
public class User {

   // @TableId
    private Integer id;
    private String name;
    private Integer age;
    private String email;
    
    @TableLogic
    //邏輯刪除字段 int mybatis-plus下,默認 邏輯刪除值為1 未邏輯刪除 1 
    private Integer deleted;
}
  1. 指定邏輯刪除字段和屬性值
  1. 單一指定
@Data
public class User {

   // @TableId
    private Integer id;
    private String name;
    private Integer age;
    private String email;
     @TableLogic
    //邏輯刪除字段 int mybatis-plus下,默認 邏輯刪除值為1 未邏輯刪除 1 
    private Integer deleted;
}
2. 全局指定
mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted # 全局邏輯刪除的實體字段名(since 3.3.0,配置後可以忽略不配置步驟2)
      logic-delete-value: 1 # 邏輯已刪除值(默認為 1)
      logic-not-delete-value: 0 # 邏輯未刪除值(默認為 0)
  1. 演示邏輯刪除操作

邏輯刪除以後,沒有真正的刪除語句,刪除改為修改語句!

 4.刪除代碼:

//邏輯刪除
@Test
public void testQuick5(){
    //邏輯刪除
    userMapper.deleteById(5);
}
@Test
public void testQuick6(){
    //正常查詢.默認查詢非邏輯刪除數據
    userMapper.selectList(null);
}

//SELECT id,name,age,email,deleted FROM user WHERE deleted=0