邏輯刪除
•物理刪除:真實刪除,將對應數據從數據庫中刪除,之後查詢不到此條被刪除數據
•邏輯刪除:假刪除,將對應數據中代表是否被刪除字段狀態修改爲“被刪除狀態”,之後在數據庫中仍舊能看到此條數據記錄
(1)數據庫中添加 deleted字段
ALTER TABLE `user` ADD COLUMN `deleted` boolean
(2)實體類添加deleted 字段
並加上 @TableLogic 註解 和 @TableField(fill = FieldFill.INSERT) 註解
@TableLogic
@TableField(fill = FieldFill.INSERT)
private Integer deleted;
(3)元對象處理器接口添加deleted的insert默認值
\src\main\java\com\mybatisplus\demo\handler\MyMetaObjectHandler.java文件中
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("deleted", 0, metaObject);
}
(4)application.properties 加入配置
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
(5)在 MybatisPlusConfig 中註冊 Bean
//邏輯刪除插件
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
(6)測試邏輯刪除
•測試後發現,數據並沒有被刪除,deleted字段的值由0變成了1
•測試後分析打印的sql語句,是一條update
•注意:被刪除數據的deleted 字段的值必須是 0,才能被選取出來執行邏輯刪除的操作
//刪除操作 邏輯刪除
@Test
public void testLogicDelete(){
int result = userMapper.deleteById(1L);
System.out.println(result);
}
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6da9dc6] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1353093587 wrapping com.mysql.cj.jdbc.ConnectionImpl@557eb543] will not be managed by Spring
==> Preparing: UPDATE user SET deleted=1 WHERE id=? AND deleted=0
==> Parameters: 1249658341914869761(Long)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6da9dc6]
1