Mybatis plus中的逻辑删除
首先对比两个概念,物理删除和逻辑删除。
物理删除:物理删除就是将数据真正的从数据库中抹除了。(我用了抹除,而没用删除,大家可以自行想象一下这种对数据的删除程度)
逻辑删除:本质上是一个修改操作,并不从数据库中将数据抹除。数据还存在于表中,但是查不出来。
实际上在现实生活中,逻辑删除用的最多。比如你想删除一个数据,如果真的从物理层面删除它,那数据就真的没了。如果你想恢复,那就变得很复杂了。
举个例子,淘宝中有个商家因为特殊原因暂时停止出售其中某一件商品,因此就需要删除它,防止将其查询出来。但是商家又不想彻底抹除数据,这时候该怎么办?这时考虑我们的逻辑删除
还有我们电脑的回收站,大家是不是可以轻轻松松的将最近删除的东西还原回去!
还有我们wps的文档,也是可以恢复的。我认为凡是轻松恢复的都是逻辑删除
Mybatis plus中的逻辑删除实现步骤
- 在表中添加一个字段,用来区分是否已经删除
- 在实体类中添加属性。
- 为属性添加注解
- 添加配置类(选)
- 添加默认配置(选)
详解
1、在表中添加字段
这里我添加了一个delete_flag字段,并且设置它的默认值为0。
2、在实体类中添加属性。
private Integer delete_flag; // 逻辑删除
3、为属性添加注解。
@TableLogic
private Integer delete_flag; // 逻辑删除
4、添加配置类(选)
这里好像是3.0以上就不用添加此配置信息了,因此大家可以看一下自己的Mybatis plus版本,如果是3.0以上,就不用添加。否则还是需要添加的。我这里的版本是3.2
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
如果你们是3.0以下,需要在配置类中添加如下代码。
// 逻辑删除的插件
@Bean
public ISqlInjector sqlInjector(){
return new LogicSqlInjector();
}
5. 添加默认配置(选)
添加默认配置信息,这里配置未删除时的值是0,删除之后的值是1。(默认就是这个配置,可以不用添加。)
但是如果我们要用文字的形式,则可以在这里设置。比如选择“未删除”“已删除”这样的表示方法。
global-config:
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
实践
1、插入数据
我们先在数据库中插入一条数据,可以看出它的delete_flag值为0。
@Test
void addUserWithTime(){
Date date = new Date();
User user = new User();
user.setUsername("test_delete_flag");
user.setAvatar("/test_delete_flag");
user.setPassword("delete_flag");
user.setEmail("163.com");
user.setStatus(0);
int insert = userMapper.insert(user);
System.out.println("insert的值是:"+insert);
}
2、删除数据
我们根据id删除刚刚插入的第10条数据
@Test
void testDelete(){
int result = userMapper.deleteById(10);
System.out.println(result);
}
可以看到,我们执行了delete操作,但是并没有从数据库中将它删除,而是将delete_flag的值由0变为1。
我们可以看一下控制台打印的sql执行操作,也可以看出它并不是执行的delete操作,而是update操作。
总结
1、首先介绍了什么是物理删除和逻辑删除。
2、接着介绍了Mybatis中使用逻辑删除的步骤。
3、最后演示了具体的操作流程和操作结果。