6. 逻辑删除

逻辑删除对应的是物理删除,分别介绍一下这两个概念:

  1. 物理删除 :指的是真正的删除,即:当执行删除操作时,将数据表中的数据进行删除,之后将无法再查询到该数据
  2. 逻辑删除 :并不是真正意义上的删除,只是对于用户不可见了,它仍然存在与数据表中
    在这个数据为王的时代,数据就是财富,所以一般并不会有哪个系统在删除某些重要数据时真正删掉了数据,通常都是在数据库中建立一个状态列,让其默认为 0,当为 0 时,用户可见;当执行了删除操作,就将状态列改为 1,此时用户不可见,但数据还是在表中的。
    按照《阿里巴巴Java开发手册》第 5 章 MySQL 数据库相关的建议,我们来为数据表新增一个is_deleted 字段:
    在这里插入图片描述
ALTER TABLE tbl_employee ADD COLUMN is_deleted  TINYINT NOT NULL DEFAULT 0;

在实体类中也要添加这一属性:

@Data
@TableName("tbl_employee")
public class Employee {@TableId(type = IdType.AUTO)private Long id;private String lastName;private String email;private Integer age;@TableField(fill = FieldFill.INSERT)private LocalDateTime gmtCreate;@TableField(fill = FieldFill.INSERT_UPDATE)private LocalDateTime gmtModified;/*** 逻辑删除属性*/@TableLogic@TableField("is_deleted")private Boolean deleted;
}

还是参照《阿里巴巴Java开发手册》第 5 章 MySQL 数据库相关的建议,对于布尔类型变量,不能加 is 前缀,所以我们的属性被命名为 deleted,但此时就无法与数据表的字段进行对应了,所以我们需要使用 @TableField 注解来声明一下数据表的字段名,而 @TableLogin 注解用于设置逻辑删除属性;此时我们执行删除操作:

@Test
void contextLoads() {employeeService.removeById(2);
}

查询数据表执行结果:
在这里插入图片描述

可以看到数据并没有被删除,只是 is_deleted 字段的属性值被更新成了 1,此时我们再来执行查询操作:

@Test
void contextLoads() {List<Employee> list = employeeService.list();list.forEach(System.out::println);
}

执行结果:
在这里插入图片描述

会发现id为2的数据并没有被查询出来,可以输出 MyBatisPlus 生成的 SQL 来分析一下,在配置文件中进行配置:

logging:level:com.example.demo.mapper: debug

再次运行查看结果:
在这里插入图片描述

原来在查询时携带了一个条件: is_deleted=0 ,这也说明了 MyBatisPlus 默认 0 为不删除,1 为删除。 若是想修改这个规定,比如设置-1 为删除,1 为不删除,也可以进行配置:

mybatis-plus:global-config:db-config:logic-delete-field: deleted # 逻辑删除属性名logic-delete-value: -1 # 删除值logic-not-delete-value: 1 # 不删除值

但建议使用默认的配置,阿里巴巴开发手册也规定 1 表示删除,0 表示未删除。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL 解析与执行流程

一、前言 在先前的技术博客中&#xff0c;我们已经详细介绍过数据库的 parser 模块与执行流程&#xff1a;用户输入的 SQL 语句通过词法解析器生成 token&#xff0c;再通过语法分析器生成抽象语法树&#xff08;AST&#xff09;&#xff0c;经过 AST 生成对应的 planNode&…

JavaScript常用事件详解

一、用于form&#xff08;表单&#xff09;的事件 在网页中经常会遇到一些表单的验证&#xff0c;是通过事件进行处理的&#xff0c;比如用户输入用户名之后&#xff0c;及时显示用户是否被注册 用于form&#xff08;表单&#xff09;的事件 事件名功能 onblur 当元素失…

数据挖掘实战-基于机器学习的电商文本分类模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

go 语言优雅地处理 error

我看到很多 golang 社区的开发者&#xff0c;特别是因为它的简单性而被吸引的开发者&#xff0c;对 golang 中的事情应该如何处理做出了一些快速的判断。 其中一件事就是错误处理。由于目前大多数语言的开发者都来自于 OOP 背景&#xff0c;他们习惯于处理异常&#xff0c;或者…

go最佳实践:如何舒适地编码

什么是 "最佳 "做法&#xff1f; 有很多做法&#xff1a;你可以自己想出来&#xff0c;在互联网上找到&#xff0c;或者从其他语言中拿来&#xff0c;但由于其主观性&#xff0c;并不总是容易说哪一个比另一个好。”最佳”的含义因人而异&#xff0c;也取决于其背景…

数据结构学习之顺序栈应用的案例(有效的括号)

实例要求&#xff1a; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效&#xff1b; 有效字符串需满足的条件&#xff1a; 1、左括号必须用相同类型的右括号闭合&#xff1b; 2、左括号必须…

CSAPP - 流程化的人工反汇编 string_length, strings_not_equal

文章目录 反汇编的流程string_length 的反汇编&#xff0c;第二次尝试strings_not_equal 反汇编&#xff0c;第二次尝试一些“定式”的整理定式1&#xff1a; cmp 和 je/jne定式2&#xff1a;test A,A 和 je/jne 反汇编的流程 依然是 CSAPP bomblab phase_1 的小白视角的理解。…

c# ref和out参数修饰符

ref&#xff1a;把值类型变成引用类型传递&#xff0c;形参的值改变了实参的值也会改变 public static int findMax(ref int num1, ref int num2){num1 * 2;num2 * 2;return num1 num2;}private static void Main(string[] args){int a1 1; int a2 2;findMax(ref a1, ref a2…

什么是算法的空间复杂度?

一、问题 常常⽤算法的空间复杂度来评价算法的性能&#xff0c;那么什么是算法的空间复杂度呢&#xff1f; 二、解答 算法的空间复杂度是指在算法的执⾏过程中&#xff0c;需要的辅助空间数量。 辅助空间数量指的不是程序指令、常数、指针等所需要的存储空间&#xff0c;也不是…

Pandas实战100例 | 案例 41: 字符串操作

案例 41: 字符串操作 知识点讲解 Pandas 提供了强大的字符串处理功能&#xff0c;这些功能类似于 Python 的标准字符串方法。你可以对 DataFrame 中的字符串数据执行各种操作&#xff0c;如分割、提取、计算长度等。 字符串分割: 使用 str.split() 分割字符串。提取字符串: …

【面试合集】1.说说你对微信小程序的理解?优缺点?

面试官&#xff1a;说说你对微信小程序的理解&#xff1f;优缺点&#xff1f; 一、是什么 2017年&#xff0c;微信正式推出了小程序&#xff0c;允许外部开发者在微信内部运行自己的代码&#xff0c;开展业务 截至目前&#xff0c;小程序已经成为国内前端的一个重要业务&…

NPM进阶知识与用法详解(二)

文章目录 一、NPM高级用法1. NPM模块发布与私有模块管理2. NPM钩子函数3. NPM包管理与优化 二、NPM与现代化前端工具链1. NPM与Yarn、PNPM的比较2. NPM在Webpack、Vite等构建工具中的应用3. NPM与Monorepo架构 三、总结与展望1. 前端包管理工具发展趋势2. 提高NPM使用效率的建议…

从传统到智能:机器视觉检测赋能PCB行业数字化转型!

PCB板在现代电子设备中是一个重要的组成部分&#xff0c;它是用来集成各种电子元器件的信息载体。在电子领域中&#xff0c;PCB板有着广泛的应用&#xff0c;而它的质量直接影响到产品的性能。随着电子科技技术和电子制造业的发展&#xff0c;贴片元器件的体积 变小&#xff0c…

AOSP 编译

AOSP清华镜像站 [2023-11-21 20:44:21] 内存太小导致编译失败&#xff0c;这里通过删除原来的 swap 然后创建更大的 swap 来解决 # 首先关闭并删除现存的 swap sudo swapoff /swapfile sudo rm /swapfile# 创建新 swap sudo dd if/dev/zero of/swapfile bs1G count32 sudo c…

亚马逊怎么防止店铺关联?

亚马逊&#xff08;Amazon&#xff09;为了确保公平竞争和防止不当行为&#xff0c;采取了一些措施来防止店铺关联&#xff0c;即通过不同的方式将多个店铺相关联&#xff0c;以获取不正当的竞争优势。以下是一些亚马逊防止店铺关联的主要措施&#xff1a; 同一经营者规定&…

在Anaconda(conda)(命令行/Linux )中新建环境安装python版本,删除环境等

1.在命令行终端新建conda环境 例如新建一个叫love的环境 在Windows的Anaconda Prompt 或 macOS/Linux的终端输入 conda create -n love python3.102.激活环境 conda activate love注&#xff1a;运行conda activate则直接激活anaconda的base环境 3.退出环境 conda deactiva…

VMware workstation搭建与安装AlmaLinux-9.2虚拟机

VMware workstation搭建与安装AlmaLinux-9.2虚拟机 适用于需要在VMware workstation平台安装AlmaLinux-9.2&#xff08;最小化安装、无图形化界面&#xff09;虚拟机。 1. 安装准备 1.1 安装平台 Windows 11 1.2. 软件信息 软件名称软件版本安装路径VMware-workstation 1…

openssl3.2 - 官方demo学习 - client-arg.c

文章目录 openssl3.2 - 官方demo学习 - client-arg.c笔记client-arg.cEND openssl3.2 - 官方demo学习 - client-arg.c 笔记 client-arg.c /*! \file client-argc. *//*! * \noteadd _CRT_SECURE_NO_WARNINGS to VS2019 option *//** Copyright 2013-2023 The OpenSSL Proj…

Pandas实战100例 | 案例 42: 数据过滤

案例 42: 数据过滤 知识点讲解 数据过滤是数据处理中的一个基本任务。在 Pandas 中&#xff0c;你可以使用布尔索引来过滤符合特定条件的数据行。 数据过滤: 通过结合条件表达式&#xff08;例如 df[A] > 2 和 df[B] < 5&#xff09;&#xff0c;可以创建一个布尔索引…

vue3 源码解析(4)— createApp 源码的实现

前言 本文是 vue3 源码分析系列的第四篇文章&#xff0c;在使用 vue3 时&#xff0c;我们需要使用 createApp 来创建一个应用实例&#xff0c;然后使用 mount 方法将应用挂载到某个DOM节点上。那么在调用 createApp 时&#xff0c;vue 再背后做了些什么事情呢&#xff1f;在这…