概念:
邏輯刪除,可以方便地實現對數據庫記錄的邏輯刪除而不是物理刪除。邏輯刪除是指通過更改記錄的狀態或添加標記字段來模擬刪除操作,從而保留了刪除前的數據,便於後續的數據分析和恢復。
- 物理刪除:真實刪除,將對應數據從數據庫中刪除,之後查詢不到此條被刪除的數據
- 邏輯刪除:假刪除,將對應數據中代表是否被刪除字段的狀態修改為“被刪除狀態”,之後在數據庫中仍舊能看到此條數據記錄
邏輯刪除實現:
- 數據庫和實體類添加邏輯刪除字段
- 表添加邏輯刪除字段
可以是一個布爾類型、整數類型或枚舉類型。
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;
}
- 指定邏輯刪除字段和屬性值
- 單一指定
@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)
- 演示邏輯刪除操作
邏輯刪除以後,沒有真正的刪除語句,刪除改為修改語句!
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