深入解析Mybatis-Plus框架:简化Java持久层开发(十三)

🍀 前言

博客地址:

  • CSDN:https://blog.csdn.net/powerbiubiu

👋 简介

本章节介绍下Mybatis-Plus框架的逻辑删除功能。

📖 正文

1 逻辑删除介绍

1.1 什么是逻辑删除?

首先我们先来了解下与逻辑删除对应的物理删除。

  • 物理删除:当我们需要将某条数据进行进行删除时,都会执行delete语句,在删除成功后,数据会从我们磁盘上删除,这种就是物理删除
  • 逻辑删除:逻辑删除其实不是真正意义上的删除,而是只执行了一次更新操作。

我们实现逻辑删除时,通常的做法是在数据库表中添加一个字段is_deleted,来标识该条数据的状态,当值为0时,表示未删除,值为1时,表示删除。这样在执行查询语句的时候,就会自动带上where is_deleted = 0条件来过滤掉逻辑删除了的数据。

1.2 为什么要逻辑删除?

逻辑删除的优点:

  • 避免数据永久丢失,方便数据恢复和审计
  • 数据的挖掘价值,针对电商的订单,用户删除但后台不会删除,这样就能通过用户订单来对用户进行分析,推荐商品

逻辑删除的缺点:

  • 在查询时,效率方面会降低,因为使用逻辑删除,查询时会增加条件where is_deleted = 0

Tips:
在实际应用中,根据数据的价值,来决定是否使用逻辑删除,如果数据没有什么价值,可以进行物理删除,不仅节省磁盘空间,还能增加一定的效率。

2 逻辑删除实现

2.1 配置文件

首先在配置文件application.yml中添加Mybatis-plus配置

mybatis-plus:
  # 当mapper接口和mapper接口对应的配置文件在不在同目录下,需要进行绑定
  mapper-locations: classpath*:/mapper/**/*.xml
  global-config:
    db-config:
      # 逻辑删除配置
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
2.2 实体类

修改实体类,在实体类中逻辑删除字段添加@TableLogic注解,让该自动拥有逻辑删除功能

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName("tb_role")
@ApiModel(value = "Role对象", description = "角色表")
public class Role implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty("角色id")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @ApiModelProperty("角色名称")
    private String roleName;

    @ApiModelProperty("角色编码")
    private String roleCode;

    @ApiModelProperty("描述")
    private String description;

    @ApiModelProperty("创建时间")
    private LocalDateTime createTime;

    @ApiModelProperty("更新时间")
    private LocalDateTime updateTime;

    @ApiModelProperty("删除标记(0:可用 1:已删除)")
    @TableLogic
    private Integer isDeleted;
}
2.3 测试逻辑删除

通过删除数据库中id为4的角色,测试一下执行结果

@Test
public void deleteByLogic() {
    int i = roleMapper.deleteById(4L);
    System.out.println("删除结果:" + i);
}

// 删除结果:1

实际执行的SQL

UPDATE tb_role SET is_deleted=1 WHERE id=4 AND is_deleted=0

通过执行的SQL我们可以发现,和之前章节介绍Mapper接口的deleteById方法删除执行的SQL语句是不一样的,添加的逻辑删除功能,现在删除实际执行了update的语句,并且会添加限定条件is_deleted=0,这时候我们在查询一下id为4的记录,看看查询结果

@Test
public void selectById() {
    Role role = roleMapper.selectById(4L);
    System.out.println("查询结果:" + role);
}

// 查询结果:null

实际执行的SQL

SELECT 
	id,role_name,role_code,description,create_time,update_time,is_deleted 
FROM 
	tb_role 
WHERE id=4 
AND is_deleted=0

通过结果看可以发现,id为4的角色查询返回结果为null,并且SQL执行语句也看到了添加了条件is_deleted=0

Tips:
逻辑删除的使用需要进行取舍,不能一味的全部使用逻辑删除,这样会增加无价值数据的堆积,不仅增加磁盘存储的空间,同时使用逻辑删除还增加效率问题。

💖 欢迎关注我的公众号

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/487260.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试八股——Redis——分布式锁——Redisson

1.看门狗机制 注意看门狗机制:redisson会监听持有锁的线程,并每隔一段时间(releaseTime/3,默认releaseTime为30s),如果线程还未释放锁的话,会给锁做一次续期。 2. 主从一致性 实际开发中我们会搭建多台redis服务器&a…

pytest+yaml+allure接口自动化测试框架

前言# 现在是2024年,自动化测试,是目前测试行业一项比较普遍的测试技术了,之前的以UI自动化测试为主,现在的以接口自动化测试为主,无论技术更迭,自动化测试总有他的重量,用机器代替手工工作&am…

C语言 青蛙跳台阶问题

1.问题描述 一只青蛙可以一次跳一级台阶,也可以一次跳两级台阶,如果青蛙要跳上n级台阶有多少种跳法? 2.问题分析 当台阶只有一级时,只能跳一级,所以只有一种跳法 当台阶有两级时,可以先跳一级&#xff…

【Flutter学习笔记】10.3 组合实例:TurnBox

参考资料:《Flutter实战第二版》 10.3 组合实例:TurnBox 这里尝试实现一个更为复杂的例子,其能够旋转子组件。Flutter中的RotatedBox可以旋转子组件,但是它有两个缺点: 一是只能将其子节点以90度的倍数旋转二是当旋转…

分治归并问题

“别让自我被拯救~” 谈谈归并与分治 当我们首次接触排序算法时,一定对所谓 "归并"方式排序的算法感到头疼~ 因为,我们难以形象出其不断 "分离"时,各个区域的状态。然而,即便 "归并"排序算法的学习…

哪些行业需要在线制作电子证书系统?

哪些行业需要在线制作电子证书系统? 1、教育机构:学校和培训机构需要为学生和培训者颁发证书,您的系统可以帮助他们快速生成和管理这些证书。 2、企业及政府部门:用于员工培训、资质认证等,提高内部管理效率。 3、专…

【C++】虚拟继承 组合

目录 一、虚拟继承 🌟【非虚拟内存分布】 🌟【虚拟继承内存分布】 🌟【虚拟继承读取】 🌟【练习检验】 🌟【继承的总结和反思】 二、组合 🌟【继承和组合】 🌟【前言回顾】 上一篇文章我们…

GL-15过流继电器 10A、5A 板前接线带附件 JOSEF约瑟

系列型号: GL-11过流继电器; GL-12过流继电器; GL-13过流继电器; GL-14过流继电器; GL-15过流继电器; GL-16过流继电器; GL-17过流继电器; 用途 GL-10系列过流继电器(以下简称继电器)具有反时限特性,应用于电机、变压器等主设备以及输配电系统的继电保…

PLC_博图系列☞P:扫描操作数的信号上升沿

PLC_博图系列☞P:扫描操作数的信号上升沿 文章目录 PLC_博图系列☞P:扫描操作数的信号上升沿背景介绍P:扫描操作数的信号上升沿说明参数示例 关键字: PLC、 西门子、 博图、 Siemens 、 p 背景介绍 这是一篇关于PLC编程的文章…

QT_day3:2024/3/22

作业1:设计界面 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin…

穿越地心:3D可视化技术带你领略地球内部奇观

在广袤无垠的宇宙中,地球是一颗充满生机与奥秘的蓝色星球。我们每天都生活在这颗星球上,感受着它的温暖与恩赐,却往往忽略了它深邃的内部世界。 想象一下,你能够穿越时空,深入地球的核心,亲眼目睹那些亿万年…

面向低成本巡线机器人的PID控制器优化——文末源码

目录 介绍 测试 电子元器件 系统特征 控制器设计 位置误差的计算 比例控制 积分控制 微分控制 改进的PID控制器 测试轨迹 源码链接 本文对经典PID控制器的改进和开环控制机制的发展进行了讨论,以提高差动轮式机器人的稳定性和鲁棒性。为了部署该算法&am…

桌面显示器PD芯片:引领桌面显示技术的新篇章

随着科技的飞速发展,桌面显示器作为人们日常工作与生活中不可或缺的重要设备,其性能与品质也在不断提升。其中,PD芯片作为桌面显示器中的核心组件,发挥着至关重要的作用。本文将对桌面显示器PD芯片进行详细介绍,探讨其…

【排序算法】插入排序与选择排序详解

文章目录 📝选择排序是什么?🌠选择排序思路🌉 直接选择排序🌠选择排序优化🌠优化方法🌉排序优化后问题 🌠选择排序效率特性 🌉插入排序🌠插入排序实现 &#…

总结虚函数表机制——c++多态底层原理

前言: 前几天学了多态。 然后过去几天一直在测试多态的底层与机制。今天将多态的机制以及它的本质分享给受多态性质困扰的友友们。 本节内容只涉及多态的原理, 也就是那张虚表的规则,有点偏向底层。 本节不谈语法!不谈语法&#x…

每日一题|djwcb【算法赛】|字符串快速幂

每日一题|djwcb【算法赛】 djwcb 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 djwcb 注意: 快速幂字符串,看…

js获取cookie

js获取cookie 前言实现讲解特别注意: 前言 主要是通过document.cookie来进行实现的 实现讲解 首先通过document.cookie 来获取到所有的cookie 然后通过分号进行分割成list 然后循环list,将list中的字符串通过首个等号进行分割然后和指定的cookie名进行比对然后返…

Android 导航方式切换

1.导航栏样式目前有,三键导航,也有全局手势导航,具体的设置是在setting里 setting里对应的 代码逻辑在packages\apps\Settings\src\com\android\settings\gestures\SystemNavigationPreferenceController.java static boolean isOverlayPacka…

芯片设计工程师必备基本功——《Verilog+HDL应用程序设计实例精讲》

进入芯片行业需要学习哪些基本功呢?其实芯片设计工程师的技能是通过多年的经验学习的。在您开始作为芯片设计工程师工作之前,很难给出一个需要的全面的单一列表,也不可能学习所有内容。话虽如此,但您开始芯片设计师职业生涯时必须…

图论基础|417. 太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙

目录 417. 太平洋大西洋水流问题 827.最大人工岛 127. 单词接龙 417. 太平洋大西洋水流问题 题目链接(opens new window) 有一个 m n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界…