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;

二、测试逻辑删除

在这里插入图片描述

1、删除前的数据

在这里插入图片描述

2、调用删除接口

在这里插入图片描述

3、删除后的数据

在这里插入图片描述

三、总结 MyBatis-Plus 逻辑删除

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

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

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

关注公众号查看更多资源
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
手把手视频详细讲解项目开发全过程,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。使用原生的Mybatis编写持久层逻辑时,所需要的代码是比较繁琐的,需要定义Mapper接口和Mapper.xml文件,每一个方法都需要编写对应的sql语句,会存在很多大量的重复工作,使用MP之后,对通用的方法做了高度的抽取,避免了很多重复工作,可以非常快速的实现了单表的各种增、删、改、查操作。除此之外,MP还提供了其他的高级功能,如:枚举、插件、ActiveRecord、SQL注入等。 本课程全面讲解了Mybatis-Plus框架的使用,从快速入门到原理分析再到插件的应用。每一个知识点都有案例进行演示学习,最终通过学习你将全面掌握MP的使用,从而使Mybatis的的开发更加的高效,达到事半功倍的效果。 适应人群 有一定的Java以及Mybatis框架的基础。 从0开始全面讲解Mybatis-Plus框架 l 快速入门 n Mybatis + MP 整合 n Spring + Mybatis + MP 整合 n SpringBoot + Mybatis + MP 整合 n 通用CRUD的全面讲解 n 配置 l 高级用法 n 条件构造器 n Oracle 主键Sequence n 通用枚举n ActiveRecord n 逻辑删除 l 插件 n 执行分析插件 n 性能分析插件 n 乐观锁插件 主讲内容 章节一:快速入门 1. Mybatis-Plus简介 2. 快速入门 3. 通用CRUD 4. 配置 5. 条件构造器 章节二:进阶 1. ActiveRecord 2. Oracle 主键Sequence 3. 插件 章节三:高级应用 1. Sql 注入器 2. 自动填充功能 3. 逻辑删除 4. 通用枚举 5. 代码生成器 6. MybatisX 快速开发插件
### 回答1: 如果您在使用 MyBatis-Plus删除功能时遇到了问题,可能有以下一些原因: 1. 您的实体类没有设置主键,或者主键设置不正确。 在 MyBatis-Plus 中,删除操作需要指定要删除的记录的主键值。如果您的实体类没有设置主键,或者主键设置不正确,将导致删除操作无法执行。请确保您的实体类主键设置正确,并且能够正确获取主键值。 2. 您的 Mapper.xml 配置文件中的 SQL 语句错误。 请检查您的 Mapper.xml 配置文件中的删除 SQL 语句是否正确。常见的错误包括语法错误、表名或列名错误等等。请仔细检查 SQL 语句,并且使用 MyBatis-Plus 提供的动态 SQL 功能,以便更灵活地构建 SQL 语句。 3. 您的数据库连接出现问题。 如果您的数据库连接出现问题,将导致删除操作无法执行。请确保您的数据库连接正常,并且能够正常访问要删除的记录。 如果以上方法无法解决您的问题,请尝试查看日志文件,以便查找更多详细信息。同时,您还可以在 MyBatis-Plus 的官方文档中查找更多相关信息和使用案例。 ### 回答2: mybatis-plus是一个优秀的开源框架,它在原生的mybatis基础之上进一步封装了大量的操作,简化了开发、提高了生产效率。在mybatis-plus中,提供了逻辑删除的机制,通过在数据表中添加一个删除标志位,来实现软删除功能。但是,在使用mybatis-plus逻辑删除功能时,会有可能会出现失效的情况,造成数据的丢失和混乱。 可能的原因: 1.逻辑删除的实现方式不正确。在使用mybatis-plus逻辑删除功能时,需要在数据库表中添加一个删除标志位,且要在实体类对应的属性上添加@TableLogic注解。如果没有正确配置或使用,就会导致逻辑删除失效。 2.数据库连接池中的缓存问题。在mybatis-plus中,为了提高数据库的性能,会使用连接池来管理数据库连接。如果缓存中的数据没有及时刷新,就会出现逻辑删除失效的问题。 3.数据是否真正被删除逻辑删除只是将数据进行了逻辑标记,并未真正从数据库中删除。如果在查询数据时没有正确过滤已经被删除的数据,则会导致逻辑删除失效。 解决方案: 1.检查配置是否正确。确保数据库表中已经添加了删除标志位,并且实体类属性添加了@TableLogic注解。 2.及时刷新缓存。为了解决数据库连接池中的缓存问题,可以在代码中手动刷新缓存,或者修改缓存设置,使得缓存自动刷新。 3.正确过滤已经被删除的数据。在进行数据查询时,需要正确过滤已经被删除的数据,避免逻辑删除失效。可以通过在查询语句中添加条件查询已删除标志位来实现。 综上所述,mybatis-plus逻辑删除失效的问题多半是由于配置不正确、缓存问题或者查询条件不正确等原因所导致的。只要从技术层面上解决这些问题,就可以有效避免逻辑删除失效的情况。建议在使用mybatis-plus逻辑删除功能时,加强对其实现原理的了解,从而更加有效地使用和排查问题。 ### 回答3: MyBatis-Plus是MyBatis的增强工具,其中包含了很多实用的功能,其中就包括了逻辑删除逻辑删除是指在数据库表中新增一个状态字段,通过修改该字段来实现数据的“删除”操作,而不是直接将数据从表中删除逻辑删除可以有效地减少数据库空间占用,同时也可以保留数据的历史记录,更加安全。 但是,在使用MyBatis-Plus进行逻辑删除时,可能会遇到一些问题,导致逻辑删除失效。主要原因可能有以下几点: 1. 没有正确配置MyBatis-Plus逻辑删除属性 在实现逻辑删除时,需要在实体类中添加标记逻辑删除的注解@TableLogic,并且在MyBatis-Plus配置文件中开启逻辑删除功能。如果没有正确配置,就可能导致逻辑删除失效。 2. SQL语句错误 如果在执行逻辑删除的SQL语句中出现了错误,就会导致逻辑删除失效。例如,SQL语句中的where条件有误,可能会导致删除的数据不是所期望的数据。 3. 数据库中没有正确设置状态字段 在实现逻辑删除时,需要在数据库表中新增一个状态字段,用来标记数据的状态。如果没有正确设置状态字段,就可能导致逻辑删除失效。 解决方法: 1. 配置MyBatis-Plus逻辑删除属性。在实体类中添加@TableLogic注解,并在MyBatis-Plus配置文件中开启逻辑删除功能。 2. 检查SQL语句是否正确。可以使用SQL语句调试工具,或者打印SQL语句进行检查。 3. 检查数据库中状态字段是否正确设置。可以使用数据库管理工具进行查看和修改。 4. 如果以上方法都无法解决问题,可以尝试更新MyBatis-Plus的版本或者检查其他相关配置。 总之,在使用MyBatis-Plus进行逻辑删除时出现问题,需要仔细检查相关配置和SQL语句,以确保逻辑删除的正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值