[Java][服務器][MyBatis-Plus]邏輯刪除

邏輯刪除

•物理刪除:真實刪除,將對應數據從數據庫中刪除,之後查詢不到此條被刪除數據

•邏輯刪除:假刪除,將對應數據中代表是否被刪除字段狀態修改爲“被刪除狀態”,之後在數據庫中仍舊能看到此條數據記錄

(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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章