MyBatis-Plus 逻辑删除功能

在项目开发中,我们的表中可能会存在这样一个字段,用来标识这条数据是否有效或者是否删除,就是一个物理删除和逻辑删除的概念。
物理删除,就是直接 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;

二、测试逻辑删除

MyBatis-Plus 逻辑删除功能

1、删除前的数据

MyBatis-Plus 逻辑删除功能

2、调用删除接口

MyBatis-Plus 逻辑删除功能

3、删除后的数据

MyBatis-Plus 逻辑删除功能

三、总结 MyBatis-Plus 逻辑删除

逻辑删除的原理:
配置并注入逻辑删除之后,mp 的 deleteById() 和其他 delete 方法, 底层SQL调用的是update table set 『逻辑删除字段』=『logicDeleteValue默认值』,也就是直接 update 标识删除的字段为配置文件中配置的值

在使用 mp 自带查询和更新方法的 sql 后面,也会追加『逻辑删除字段』=『LogicNotDeleteValue默认值』,如下,调用 mp 封装的查询方法,可以看到打印的 sql 中会自动追加标识删除的字段为配置文件中配置的值
MyBatis-Plus 逻辑删除功能
MyBatis-Plus 逻辑删除功能

需要注意的是,如果是自己在 mapper.xml 中写的查询语句,不会加上逻辑删除的条件,需要自己加上

匿名

发表评论

匿名网友