Mybatis-Plus:逻辑删除(@TableLogic 将数据标记为删除,而并非真正 的物理删除(非DELETE操作))
Posted CodeJiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
# 删除状态的值为:1
mybatis-plus.global-config.db-config.logic-delete-value=1
# 未删除状态的值为:0
mybatis-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);
运行结果:
发现没有查出id
为3
的数据
2. 说明
刚开始我的测试结果一直不正常,我去网上查了一下,我的Mybatis-Plus
的版本是3.1.0
,低于3.1.1
所以我把版本升高到了3.3.2
就可以正常执行了。
版本可以等于3.1.1
。
以上是关于Mybatis-Plus:逻辑删除(@TableLogic 将数据标记为删除,而并非真正 的物理删除(非DELETE操作))的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点#mybatis-plus学习与实践逻辑删除
mybatis-plus(3.0-RELEASE)逻辑删除的坑
Mybatis-Plus:逻辑删除(@TableLogic 将数据标记为删除,而并非真正 的物理删除(非DELETE操作))
Mybatis-Plus:逻辑删除(@TableLogic 将数据标记为删除,而并非真正 的物理删除(非DELETE操作))