Mybatis-Plus:逻辑删除(@TableLogic 将数据标记为删除,而并非真正 的物理删除(非DELETE操作))

时间:2023-05-09 17:21:04 买帖  | 投诉/举报

篇首语:本文由小编为大家整理,主要介绍了Mybatis-Plus:逻辑删除(@TableLogic 将数据标记为删除,而并非真正 的物理删除(非DELETE操作))相关的知识,希望对你有一定的参考价值。

本节案例承接上节案例

1. 逻辑删除

开发系统时,有时候在实现功能时,删除操作需要实现逻辑删除,所谓逻辑删除就是将数据标记为删除,而并非真正的物理删除(非DELETE操作),查询时需要携带状态条件,确保被标记的数据不被查询到。这样做的目的就是避免
数据被真正的删除。

Mybatis-Plus就提供了这样的功能,方便我们使用,接下来我们一起学习下。


1.1 修改表结构

tb_user表增加deleted字段,用于表示数据是否被删除,1代表删除,0代表未删除。

Navicat执行下列SQL语句:

ALTER TABLE `tb_user` ADD COLUMN `deleted` int(1) NULL DEFAULT 0 COMMENT '1代表删除,0代表未删除' AFTER `version`;

同时,也修改User实体,增加deleted属性并且添加@TableLogic注解,标识这是一个逻辑删除的字段:

User.java


1.2 配置删除状态和未删除状态的值


application.properties

# 删除状态的值为:1mybatis-plus.global-config.db-config.logic-delete-value=1# 未删除状态的值为:0mybatis-plus.global-config.db-config.logic-not-delete-value=0


1.3 测试


1.3.1 先逻辑删除id为3的数据


SpringbootMybatisplusApplicationTests.java

    @Test    public void testDeleteById()         this.userMapper.deleteById(3L);    

运行结果:

生成的sql语句为:UPDATE tb_user SET deleted=1 WHERE id=? AND deleted=0


1.3.2 现在查询所有数据


SpringbootMybatisplusApplicationTests.java

    @Test    public void testDeleteById()         for (User user : this.userMapper.selectList(null))             System.out.println(user);            

运行结果:

发现没有查出id3的数据


2. 说明

刚开始我的测试结果一直不正常,我去网上查了一下,我的Mybatis-Plus的版本是3.1.0,低于3.1.1 所以我把版本升高到了3.3.2就可以正常执行了。

版本可以等于3.1.1



以上是关于Mybatis-Plus:逻辑删除(@TableLogic 将数据标记为删除,而并非真正 的物理删除(非DELETE操作))的主要内容,如果未能解决你的问题,请参考以下文章