[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

 

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