Mybatis实现物理删除和逻辑删除。
Mybatis实现物理删除和逻辑删除。1.首先明白什么是物理删除,什么是逻辑删除?什么是物理删除呢?就是直接干掉数据库的数据,无法再恢复回来。但在当今的企业级项目中,物理删除已经非常少见,而是使用逻辑删除。所谓逻辑删除本质上是个update操作,通过一个标记字段来识别某个数据是否被隐藏起来,但是对于用户来说看不到了自然以为就是删除了。我们分别来看看mybatis-plus的物理删除和逻辑删除。项目
Mybatis实现物理删除和逻辑删除。
教程目录:
教程一: Mybatis-plus使用教程
教程二:mybatis-plus的字段自动填充
教程三:Mybatis实现物理删除和逻辑删除
教程四:Mybatis-plus实现乐观锁
教程五:Mybatis-plus实现条件查询
扫码关注公众号,更多资料尽在掌握。
1.首先明白什么是物理删除,什么是逻辑删除?
什么是物理删除呢?就是直接干掉数据库的数据,无法再恢复回来。但在当今的企业级项目中,物理删除已经非常少见,而是使用逻辑删除。所谓逻辑删除本质上是个update操作,通过一个标记字段来识别某个数据是否被隐藏起来,但是对于用户来说看不到了自然以为就是删除了。
我们分别来看看mybatis-plus的物理删除和逻辑删除。
项目的创建就不详细说明了,我们直接再之前的表上操作。
我们先来看看物理删除,写一个删除方法吧!
物理删除方法有几种,我们来看看常用的:
第一种、deleteById()方法,仅需传入你要删除数据的id即可。注意看控制台,这里执行的是delete语句。真正实现物理删除,数据表中的信息不存在了。
第二种、deleteBatchIds方法,批量删除,也是传入id即可。
第三种、deleteByMap方法,条件删除。
这些方法都是物理删除,底层执行的是delete语句。
逻辑删除:
所谓逻辑删除本质上是个update操作,通过一个标记字段来识别某个数据是否被隐藏起来,假设在表中设置一个deleted字段,已删除用1表示,未删除用0表示,这样以后在每次查询数据时候,都会添加一个条件 where deleted = 0,这样就永远不会查出delete= 1 的数据了。
接下来试试看吧!
第一步、打开数据表,添加一个deleted字段,用来表示逻辑删除位。
我们先看一下表中的数据,所有deleted都是0表示,代表所有数据都在。
第二步、接下来在实体类中,添加该字段,并加上注解@TableLogic,该注解就表示逻辑删除位。
import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@TableId(type = IdType.ID_WORKER)
private Long id;
private String name;
private Integer age;
private String email;
//create_time
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
@TableLogic
private Integer deleted;
}
第三步、我们需要写一个配置类来开启mybatis-plus的逻辑删除。
MybatisConfig.java
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisConfig {
//逻辑删除
@Bean
public ISqlInjector iSqlInjector(){
return new LogicSqlInjector();
}
}
到这里逻辑删除配置成功,来测试一下吧。
我们用deleteById()方法测试。
我们来看看控制台的输出:
看到了吗,现在底层并不在执行delete了,而是执行update语句把delete字段改变下。这样就实现了逻辑删除,
我们再来看看数据表中数据。
这样逻辑删除就成功了。
这里你执行一下查询所有方法也不会查到该条数据,因为查询语句后面会跟一个 where delete = 0的条件!
项目源码:
更多推荐
所有评论(0)