【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 的记录,即已删除记录。

相关推荐
天空之城夢主8 分钟前
MySQL 全量、增量备份与恢复
数据库·mysql·oracle
Elastic 中国社区官方博客11 分钟前
连接关键点:使用 ES|QL 联接实现更丰富的可观测性洞察
大数据·数据库·sql·elasticsearch·搜索引擎·全文检索
元闰子13 分钟前
AI Agent需要什么样的数据库?
数据库·人工智能·后端
什么都想学的阿超21 分钟前
【PostgreSQL 02】PostgreSQL数据类型革命:JSON、数组与地理信息让你的应用飞起来
数据库·postgresql·json
果壳~23 分钟前
【Java】mybatis-plus乐观锁与Spring重试机制
java·spring·mybatis
小陈又菜1 小时前
SQL Indexes(索引)
数据库·sql·索引
星star~1 小时前
MyBatis相关面试题
java·开发语言·mybatis
TDengine (老段)2 小时前
TDengine 的 AI 应用实战——运维异常检测
大数据·数据库·人工智能·物联网·时序数据库·tdengine·涛思数据
Le_ee2 小时前
dvwa7——SQL Injection
数据库·sql·网络安全·靶场·token·dvwa
依稀i1233 小时前
MySQL连接报SSL错误
数据库·mysql·ssl