深入解析MyBatis-Plus中的逻辑删除功能及实例

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 深入解析MyBatis-Plus中的逻辑删除功能及实例

深入解析MyBatis-Plus中的逻辑删除功能及实例

介绍:

在实际开发中,数据的删除操作是一个常见需求。MyBatis-Plus提供了方便且灵活的逻辑删除功能,可以简化开发人员在删除数据时的操作。本文将详细讲解MyBatis-Plus中的逻辑删除特性,并结合实际案例进行演示和说明。

案例背景

假设我们有一个博客系统,包含Blog类作为博客实体。在这个系统中,我们希望能够对博客进行软删除操作,即将要删除的博客标记为已删除状态,而不是直接物理删除。通过逻辑删除,我们可以保留删除记录,有助于追踪数据变更历史和实现审计需求。

使用逻辑删除功能

配置数据库和实体类

首先,在使用逻辑删除功能之前,我们需要进行相关的配置。

  1. 在数据库表中,我们需要添加一个用于表示逻辑删除状态的字段。例如,我们可以添加一个名为deleted的tinyint类型字段,默认值为0。
  2. 在实体类(这里是Blog类)中,我们使用Lombok来减少getter和setter方法的编写工作。以下是一个示例:
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("blog")
public class Blog {
    private Long id;
    private String title;
    private String content;
    @TableLogic
    private Integer deleted;
}

在上述示例中,我们使用@Data注解简化了getter和setter方法的编写,并使用@TableName注解标记了实体类对应的数据库表名。同时,使用@TableLogic注解标记了deleted字段为逻辑删除字段。

执行逻辑删除操作

接下来,我们将演示如何在MyBatis-Plus中使用逻辑删除功能。

方式一:局部配置

局部配置适用于只需要在某个Mapper接口中应用逻辑删除功能的情况。

首先,在Mapper接口中添加@Repository注解并继承BaseMapper接口,例如:

import org.springframework.stereotype.Repository;
@Repository
public interface BlogMapper extends BaseMapper<Blog> {
}

然后,在Service层的实现类中进行逻辑删除的调用:

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements BlogService {
    @Override
    public boolean deleteBlogById(Long id) {
        return baseMapper.deleteById(id) > 0;
    }
}

在上述示例中,我们直接调用baseMapper的deleteById方法进行逻辑删除操作。MyBatis-Plus会自动将逻辑删除字段设置为1(表示已删除)。

方式二:全局配置

全局配置适用于对整个项目中的所有Mapper接口都应用逻辑删除功能的情况。

首先,在application.yml或application.properties文件中配置全局属性:

mybatis-plus:
  global-config:
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0

然后,设置全局配置项并在Mapper接口中使用@TableLogic注解:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 添加乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

在上述示例中,我们创建了一个@Configuration类,并注册了Mybatis-Plus提供的分页插件(PaginationInterceptor)和乐观锁插件(OptimisticLockerInnerInterceptor)。这些插件可以根据具体需求进行配置。

测试

为了验证逻辑删除功能是否正常工作,我们可以编写单元测试。以下是一个简单的测试实例:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class BlogServiceTest {
    @Autowired
    private BlogService blogService;
    @Test
    public void testDeleteBlog() {
        Long blogId = 1L; // 假设要删除ID为1的博客
        boolean result = blogService.deleteBlogById(blogId);
        System.out.println("Delete successful: " + result);
    }
}

在上述测试中,我们注入了BlogService接口,并调用deleteBlogById方法来执行逻辑删除操作。

通过编写和运行这些测试用例,我们可以验证使用逻辑删除功能时的正常性。

如果大家觉得有用的话,可以关注我下面的微信公众号,极客李华,我会在里面更新更多行业资讯,企业面试内容,编程资源,如何写出可以让大厂面试官眼前一亮的简历等内容,让大家更好学习编程,我的抖音,B站也叫极客李华。大家喜欢也可以关注一下

相关文章
|
1月前
|
数据可视化 数据挖掘 BI
团队管理者必读:高效看板类协同软件的功能解析
在现代职场中,团队协作的效率直接影响项目成败。看板类协同软件通过可视化界面,帮助团队清晰规划任务、追踪进度,提高协作效率。本文介绍看板类软件的优势,并推荐五款优质工具:板栗看板、Trello、Monday.com、ClickUp 和 Asana,助力团队实现高效管理。
52 2
|
8天前
|
搜索推荐 UED Python
实现一个带有昼夜背景切换的动态时钟:从代码到功能解析
本文介绍了一个使用Python和Tkinter库实现的动态时钟程序,具有昼夜背景切换、指针颜色随机变化及整点和半点报时功能。通过设置不同的背景颜色和随机变换指针颜色,增强视觉吸引力;利用多线程技术确保音频播放不影响主程序运行。该程序结合了Tkinter、Pygame、Pytz等库,提供了一个美观且实用的时间显示工具。欢迎点赞、关注、转发、收藏!
123 94
|
1天前
|
存储 Java 计算机视觉
Java二维数组的使用技巧与实例解析
本文详细介绍了Java中二维数组的使用方法
25 15
|
7天前
|
人工智能 自然语言处理 搜索推荐
销售易、悟空、神州云动CRM:全方位功能解析与优势特色盘点
销售易CRM、悟空CRM和神州云动CRM各自具备独特的产品功能与优势,适用于不同类型的企业。销售易CRM提供移动化、社交化和AI驱动的全流程管理,适合大型企业及跨国公司;悟空CRM以智能数据分析和移动办公支持见长,适合中大型企业;神州云动CRM则凭借灵活定制和多行业适配能力,特别适合大中型企业。企业在选择时应根据自身需求和发展战略,挑选最适合的CRM系统,以实现客户关系管理的最大化效益。
|
27天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
20天前
|
存储 数据库 对象存储
新版本发布:查询更快,兼容更强,TDengine 3.3.4.3 功能解析
经过 TDengine 研发团队的精心打磨,TDengine 3.3.4.3 版本正式发布。作为时序数据库领域的领先产品,TDengine 一直致力于为用户提供高效、稳定、易用的解决方案。本次版本更新延续了一贯的高标准,为用户带来了多项实用的新特性,并对系统性能进行了深度优化。
32 3
|
20天前
|
供应链 数据可视化 数据挖掘
企业服务品牌深度解析:销售易、用友、白码功能与特色对比
在企业服务领域,销售易、用友、白码等品牌凭借独特的产品和解决方案占据重要地位。销售易专注于CRM,提供客户管理、销售自动化、市场营销等功能,提升销售效率与客户满意度。用友作为领先的企业服务提供商,涵盖ERP、财务管理、人力资源管理等,助力企业资源优化配置。白码则以低代码开发平台为核心,支持快速构建业务应用,具备高度可定制化和易于维护的特点。三者各具特色,共同推动企业数字化转型。
|
1月前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
119 5
|
1月前
|
存储 网络协议 算法
【C语言】进制转换无难事:二进制、十进制、八进制与十六进制的全解析与实例
进制转换是计算机编程中常见的操作。在C语言中,了解如何在不同进制之间转换数据对于处理和显示数据非常重要。本文将详细介绍如何在二进制、十进制、八进制和十六进制之间进行转换。
60 5
|
1月前
|
存储 安全 数据安全/隐私保护
深入解析iOS 14隐私保护功能:用户数据安全的新里程碑
随着数字时代的到来,个人隐私保护成为全球关注的焦点。苹果公司在最新的iOS 14系统中引入了一系列创新的隐私保护功能,旨在为用户提供更透明的数据使用信息和更强的控制权。本文将深入探讨iOS 14中的几项关键隐私功能,包括App跟踪透明性、简化的隐私设置以及增强的系统安全性,分析它们如何共同作用以提升用户的隐私保护水平。
141 3

推荐镜像

更多