【MyBatis Plus 逻辑删除详解】

文章目录

  • [MyBatis Plus 逻辑删除详解](#MyBatis Plus 逻辑删除详解)
    • 前言
    • 什么是逻辑删除?
    • [MyBatis Plus 中的逻辑删除](#MyBatis Plus 中的逻辑删除)
      • [1. 添加逻辑删除字段](#1. 添加逻辑删除字段)
      • [2. 实体类的配置](#2. 实体类的配置)
      • [3. 配置 MyBatis Plus](#3. 配置 MyBatis Plus)
      • [4. 使用逻辑删除](#4. 使用逻辑删除)
      • [5. 查询逻辑删除的记录](#5. 查询逻辑删除的记录)

MyBatis Plus 逻辑删除详解

前言

MyBatis Plus 是一个强大的持久化框架,它在基于 MyBatis 的基础上提供了更多便捷的功能,其中之一就是逻辑删除。逻辑删除是一种常见的数据处理方式,它允许你在不实际删除数据库记录的情况下,标记记录为已删除状态。

什么是逻辑删除?

逻辑删除,也称为软删除,是一种常见的数据管理方法。它通过在数据库表中添加一个用于标识记录状态的字段(通常是一个布尔值或枚举值),来代替物理删除记录。这样做的好处是可以保留被删除记录的历史信息,同时避免了实际删除记录可能引发的数据丢失问题。

MyBatis Plus 中的逻辑删除

MyBatis Plus 提供了逻辑删除的内置支持。下面是如何在 MyBatis Plus 中启用逻辑删除功能的步骤。

1. 添加逻辑删除字段

首先,在数据表中添加一个用于标识记录状态的字段。这个字段通常是一个整数或枚举类型,表示记录的状态,例如 0 表示正常,1 表示删除。假设我们的表中有一个 status 字段用于表示记录状态。

2. 实体类的配置

在实体类中需要使用 MyBatis Plus 的 @TableLogic 注解来标记逻辑删除字段。标识 MyBatis Plus 哪个字段用于逻辑删除。

java 复制代码
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("your_table_name")
public class YourEntity {
    // 其他字段...
    
    @TableLogic
    private Integer status;
}

3. 配置 MyBatis Plus

在 MyBatis Plus 的配置文件中,需要启用逻辑删除的功能。通过在配置文件中添加如下配置来实现:

xml 复制代码
<configuration>
    <!-- 其他配置 -->
    
    <global-config>
        <db-config>
            <!-- 其他配置 -->
            <logic-delete-value>1</logic-delete-value>
            <logic-not-delete-value>0</logic-not-delete-value>
        </db-config>
    </global-config>
</configuration>

上述配置表示 MyBatis Plus 使用 1 来表示已删除状态,使用 0 来表示未删除状态。

4. 使用逻辑删除

执行删除操作时,MyBatis Plus 会自动将逻辑删除字段更新为已删除状态,而不是实际从数据库中删除记录。例如:

java 复制代码
yourEntityMapper.deleteById(id);

这会更新 status 字段为 1,表示已删除。

5. 查询逻辑删除的记录

要查询逻辑删除的记录,可以使用 MyBatis Plus 的 select 方法,并指定查询条件,例如:

java 复制代码
List<YourEntity> deletedRecords = yourEntityMapper.selectList(Wrappers.<YourEntity>lambdaQuery()
    .eq(YourEntity::getStatus, 1));

这将返回所有 status1 的记录,即已删除记录。

相关推荐
DCTANT36 分钟前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
喜欢敲代码的程序员3 小时前
SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分离版:项目搭建(一)
spring boot·mysql·elementui·vue·mybatis
AI、少年郎3 小时前
Oracle 进阶语法实战:从多维分析到数据清洗的深度应用(第四课)
数据库·oracle
赤橙红的黄3 小时前
自定义线程池-实现任务0丢失的处理策略
数据库·spring
DataGear3 小时前
如何在DataGear 5.4.1 中快速制作SQL服务端分页的数据表格看板
javascript·数据库·sql·信息可视化·数据分析·echarts·数据可视化
weixin_438335403 小时前
分布式锁实现方式:基于Redis的分布式锁实现(Spring Boot + Redis)
数据库·redis·分布式
码不停蹄的玄黓4 小时前
MySQL Undo Log 深度解析:事务回滚与MVCC的核心功臣
数据库·mysql·undo log·回滚日志
Qdgr_4 小时前
价值实证:数字化转型标杆案例深度解析
大数据·数据库·人工智能
数据狐(DataFox)4 小时前
SQL参数化查询:防注入与计划缓存的双重优势
数据库·sql·缓存
Arthurmoo4 小时前
Linux系统之MySQL数据库基础
linux·数据库·mysql