在项目开发中,我们的表中可能会存在这样一个字段,用来标识这条数据是否有效或者是否删除,就是一个物理删除和逻辑删除的概念。
物理删除,就是直接 delete 数据的操作
逻辑删除,就是在业务逻辑上,标识某一条数据是删除的,不能再操作
以往的操作可能是我们自己手动对相关字段 update 来进行逻辑删除的概念,然后查询时再通过条件过滤相关删除的数据,今天我们使用 MyBatis-Plus 之后,这一切就变得简单了起来。
本文基于 springboot
一、相关依赖及配置
1、引入 pom 依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
<!--mybatis plus 相关依赖版本注意保持一致,否则会有惊喜-->
<!--mybatis plus 集成 springboot 核心依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<!--mybatis plus 代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.1.0</version>
</dependency>
2、yml 配置文件
数据库相关连接信息按自己的进行配置
mybatis-plus:
# 扫描所有xml
mapper-locations: classpath:mapper/*.xml
# 扫描实体类
type-aliases-package: com.wxw.springboot_mybatisplus.MetaObject.entity
# 打印日志
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
#数据库相关配置
db-config:
#逻辑删除配置
logic-delete-value: 1 # 默认1是已删除的
logic-not-delete-value: 0 # 默认0未删除
3、MybatisPlusConfig 注入逻辑删除 bean
@Configuration
public class MybatisPlusConfig {
/***
* 逻辑删除注入
* @return
*/
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
}
此处需要注意,可能有的同学看到的文章中注入的是
return new DefaultSqlInjector();
此处需要根据自己实际情况进行注入,我这边注入 DefaultSqlInjector 之后还是直接物理删除了,注入 LogicSqlInjector 之后执行的就是逻辑删除了。
4、标识删除的字段上增加注解
实体类中表示删除的字段上增加注解 @TableLogic
@TableLogic
private String deleteFlag;
二、测试逻辑删除
1、删除前的数据
2、调用删除接口
3、删除后的数据
三、总结 MyBatis-Plus 逻辑删除
逻辑删除的原理:
配置并注入逻辑删除之后,mp 的 deleteById() 和其他 delete 方法, 底层SQL调用的是update table set 『逻辑删除字段』=『logicDeleteValue默认值』,也就是直接 update 标识删除的字段为配置文件中配置的值
在使用 mp 自带查询和更新方法的 sql 后面,也会追加『逻辑删除字段』=『LogicNotDeleteValue默认值』,如下,调用 mp 封装的查询方法,可以看到打印的 sql 中会自动追加标识删除的字段为配置文件中配置的值
需要注意的是,如果是自己在 mapper.xml 中写的查询语句,不会加上逻辑删除的条件,需要自己加上
关注公众号查看更多资源