Java开发学习(四十八)----MyBatisPlus删除语句之逻辑删除

news2024/5/18 16:13:26

1、逻辑删除

接下来要讲解是删除中比较重要的一个操作,逻辑删除,先来分析下问题:

  • 这是一个员工和其所签的合同表,关系是一个员工可以签多个合同,是一个一(员工)对多(合同)的表

  • 员工ID为1的张业绩,总共签了三个合同,如果此时他离职了,我们需要将员工表中的数据进行删除,会执行delete操作

  • 如果表在设计的时候有主外键关系,那么同时也得将合同表中的前三条数据也删除掉

  • 后期要统计所签合同的总金额,就会发现对不上,原因是已经将员工1签的合同信息删除掉了

  • 如果只删除员工不删除合同表数据,那么合同的员工编号对应的员工信息不存在,那么就会出现垃圾数据,就会出现无主合同,根本不知道有张业绩这个人的存在

  • 所以经过分析,我们不应该将表中的数据删除掉,而是需要进行保留,但是又得把离职的人和在职的人进行区分,这样就解决了上述问题,如:

  • 区分的方式,就是在员工表中添加一列数据deleted,如果为0说明在职员工,如果离职则将其改完1,(0和1所代表的含义是可以自定义的)

所以对于删除操作业务问题来说有:

  • 物理删除:业务数据从数据库中丢弃,执行的是delete操作

  • 逻辑删除:为数据设置是否可用状态字段,删除时设置状态字段为不可用状态,数据保留在数据库中,执行的是update操作

MyBatisPlus中逻辑删除具体该如何实现?

步骤1:修改数据库表添加deleted

字段名可以任意,内容也可以自定义,比如0代表正常,1代表删除,可以在添加列的同时设置其默认值为0正常。

步骤2:实体类添加属性

(1)添加与数据库表的列对应的一个属性名,名称可以任意,如果和数据表列名对不上,可以使用@TableField进行关系映射,如果一致,则会自动对应。

(2)标识新增的字段为逻辑删除字段,使用@TableLogic

@Data
//@TableName("tbl_user") 可以不写是因为配置了全局配置
public class User {
    @TableId(type = IdType.ASSIGN_UUID)
    private String id;
    private String name;
    @TableField(value="pwd",select=false)
    private String password;
    private Integer age;
    private String tel;
    @TableField(exist=false)
    private Integer online;
    @TableLogic(value="0",delval="1")
    //value为正常数据的值,delval为删除数据的值
    private Integer deleted;
}

步骤3:运行删除方法

@SpringBootTest
class Mybatisplus03DqlApplicationTests {
​
    @Autowired
    private UserDao userDao;
    
    @Test
    void testDelete(){
       userDao.deleteById(1L);
    }
}

从测试结果来看,逻辑删除最后走的是update操作,会将指定的字段修改成删除状态对应的值。

思考

逻辑删除,对查询有没有影响呢?

  • 执行查询操作

    @SpringBootTest
    class Mybatisplus03DqlApplicationTests {
    ​
        @Autowired
        private UserDao userDao;
        
        @Test
        void testFind(){
           System.out.println(userDao.selectList(null));
        }
    }

    运行测试,会发现打印出来的sql语句中会多一个查询条件,如:

    可想而知,MyBatisPlus的逻辑删除会将所有的查询都添加一个未被删除的条件,也就是已经被删除的数据是不应该被查询出来的。

  • 如果还是想把已经删除的数据都查询出来该如何实现呢?

    通过自己写SQL语句来实现查询。

    @Mapper
    public interface UserDao extends BaseMapper<User> {
        //查询所有数据包含已经被删除的数据
        @Select("select * from tbl_user")
        public List<User> selectAll();
    }
  • 如果每个表都要有逻辑删除,那么就需要在每个模型类的属性上添加@TableLogic注解,如何优化?

    在配置文件中添加全局配置,如下:

    mybatis-plus:
      global-config:
        db-config:
          # 逻辑删除字段名
          logic-delete-field: deleted
          # 逻辑删除字面值:未删除为0
          logic-not-delete-value: 0
          # 逻辑删除字面值:删除为1
          logic-delete-value: 1

介绍完逻辑删除,逻辑删除的本质为:

逻辑删除的本质其实是修改操作。如果加了逻辑删除字段,查询数据时也会自动带上逻辑删除字段。

执行的SQL语句为:

UPDATE tbl_user SET deleted=1 where id = ? AND ==deleted===0

执行数据结果为:

知识点1:@TableLogic

名称@TableLogic
类型属性注解
位置模型类中用于表示删除字段的属性定义上方
作用标识该字段为进行逻辑删除的字段
相关属性value:逻辑未删除值 delval:逻辑删除值

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

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

相关文章

蓝桥杯刷题022——发现环(拓扑排序、DFS/BFS)

2017国赛 题目描述 小明的实验室有 N 台电脑&#xff0c;编号1⋯N。原本这 N 台电脑之间有 N−1 条数据链接相连&#xff0c;恰好构成一个树形网络。在树形网络上&#xff0c;任意两台电脑之间有唯一的路径相连。 不过在最近一次维护网络时&#xff0c;管理员误操作使得某两台电…

centos7安装pdf2htmlEX

1 概述 需要把PDF 转成 html,使用的是 pdf2htmlEX 工具。 2 安装 2.1 安装基本工具和依赖库 yum install vim unzip wget git gcc* cmake poppler* libtool* glib* gio* freetype* pango* cairo* -y 2.2 安装fontforge 2.2.1 下载 wget https://github.com/coolwanglu/f…

koa2-JWT登录验证、上传图片、上传视频

文章目录什么是JWT?怎么使用&#xff1f;后端进行token处理&#xff0c;传递给前端Token的使用分成了两部分前端的处理处理token后端处理携带和不携带token的请求上传图片会持续更新上传视频会持续更新什么是JWT?怎么使用&#xff1f; JWT&#xff08;JSON Web Token&#x…

K_A12_001 基于STM32等单片机采集火光火焰传感参数串口与OLED0.96双显示

K_A12_001 基于STM32等单片机采集火光火焰传感参数串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RC火光火焰模块1.2、STM32F103C8T6火光火焰模块五、基础知识学习与相…

Revit中添加水平仰视平面图及水平剖面

一、 Revit中如何添加水平仰视平面图 在Revit平面视图中视角是俯视视角&#xff0c;但是在一些特殊的情况下&#xff0c;我们可能需要创建仰视视角的平面视图&#xff0c;例如我们需要向上看天花板的灯具布置的时候。 1.下面讲一下如何在添加仰视平面视图的方法。如图1在模型中…

STM32CubeMX+FATFS+FREERTOS实现W25Q256虚拟U盘

一、软件硬件说明软件&#xff1a;STM32CubeMX V6.6.1 /KEIL5 V5.29硬件&#xff1a;正点原子阿波罗开发板&#xff0c;核心板STM32F429IGT6(176脚)使用USB_SLAVE接口连接电脑USB&#xff0c;从而读取W25Q256里的文件W25Q256&#xff1a;SPI5接口二、STM32CubeMX配置RCC配置SYS…

Lecture3 梯度下降(Gradient Descent)

目录 1 问题背景 2 批量梯度下降 (Batch Gradient Descent) 3 鞍点(Saddle Point) 3 随机梯度下降 (Stochastic Gradient Descent) 4 小批量梯度下降 (Mini-batch Gradient Descent) 1 问题背景 图1 上节课讲述的穷举法求最优权重值在Lecture2中&#xff0c;介绍了使用穷举…

python+django校园在线拍卖系统pycharm项目源码

登录页和注册页 管理员、用户和拍卖者都可以在此页面登录到该系统 拍卖者注册的页面&#xff0c;拍卖者如果没有账号可以点击注册进入到系统 开发语言&#xff1a;Python 框架&#xff1a;django Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&…

在国内有几个CCIE考点?

笔试在VUE指定思科考试中心报考加考试; 实验考试在国内只有北京和香港两个考点。还有一些其他考点&#xff0c;下面让我们一起来看一下。 CCIE笔试考点 思科ccie认证的笔试考试地点都在Vue考试中心,Vue考试中心是思科官方授权的考试地点,在国内大部分城市都有分布 CCIE笔试报…

基于ssm的航空售票系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经从做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xf…

c# 将数据导出到EXCEL文件

第一步&#xff1a;项目中加入引用。 在鼠标右击项目&#xff0c;点击【添加】弹出菜单列表&#xff0c;选择【项目引用】弹出【引用管理器】对话框&#xff0c;选择【COM】-【Microsoft Excel 16.0 Object Library】&#xff0c;如图所示&#xff1a; 第二步&#xff0c;编辑…

【项目精选】基于Java的敬老院管理系统的设计和实现

本系统主要是针对敬老院工作人员即管理员和员工设计的。敬老院管理系统 将IT技术为养老院提供一个接口便于管理信息,存储老人个人信息和其他信息,查找 和更新信息的养老院档案,节省了员工的劳动时间,大大降低了成本。 其主要功能包括&#xff1a; 系统管理员用户功能介绍&#…

体系结构概述

目录1.系统模型操作模式和状态寄存器和特殊寄存器2.存储器系统3.栈空间操作4.异常和中断5.嵌套向量中断控制器&#xff08;NVIC&#xff09;1.系统模型 操作模式和状态 Cortex-M0处理器包含两种操作模式和两种状态。 处理器在运行程序时处于Thumb状态&#xff0c;在这种状态…

个人信息保护认证

个人信息保护认证是证明个人信息处理者在认证范围内开展的个人信息收集、存储、使用、加工、传输、提供、公开、删除以及跨境等处理活动符合认证依据标准要求。适用范围 本规则依据《中华人民共和国认证认可条例》制定&#xff0c;规定了对个人信息处理者开展个人信息收集、存储…

【漏洞复现】phpStudy 小皮 Windows面板 RCE漏洞

文章目录前言一、漏洞描述二、漏洞复现前言 本篇文章仅用于漏洞复现研究和学习&#xff0c;切勿从事非法攻击行为&#xff0c;切记&#xff01; 一、漏洞描述 Phpstudy小皮面板存在RCE漏洞&#xff0c;通过分析和复现方式发现其实本质上是一个存储型XSS漏洞导致的RCE。通过系…

关于IB课程,你需要知道些什么?

1IB课程到底是什么&#xff1f; IB课程 IB课程是由国际文凭组织IBO&#xff08;International Baccalaureate Organization&#xff09;开设的、针对3-19岁学生的、从幼儿园到大学预科的课程&#xff0c;服务对象为全球3-19岁的学生。IBO历史 1968年IBO组织在瑞士日内瓦成立&am…

php mysql保健品购物商城系统

目 录 1 绪论 1 1.1 开发背景 1 1.2 研究的目的和意义 1 1.3 研究现状 2 2 开发技术介绍 2 2.1 B/S体系结构 2 2.2 PHP技术 3 2.3 MYSQL数据库 4 2.4 Apache 服务器 5 2.5 WAMP 5 2.6 系统对软硬件要求 6 …

2.计算机基础-计算机网络面试题—基础知识、容器、面向对象、并发编程

本文目录如下&#xff1a;计算机基础-计算机网络 面试题一、基础知识简述 TCP 和 UDP 的区别&#xff1f;http与https的区别?Session 和 Cookie 有什么区别&#xff1f;URL是什么&#xff1f;由哪些部分组成&#xff1f;OSI 的 五层模型 都有哪些&#xff1f;get 和 post 请求…

CIAM 如何平衡数据安全与客户体验?| 身份云研究院

普华永道研究表明&#xff0c;32% 的用户会因为一次体验不佳而放弃使用一个产品。无独有偶&#xff0c;据数据分析公司 Preact 研究显示&#xff0c;首次注册、登录或验证是最主要的用户流失环节&#xff0c;占整体流失率的 22.9%。 对于任何在网上做生意的公司来说&#xff0…

MySQL为什么要改进LRU算法?

普通LRU算法 LRU算法介绍 LRU Least Recently Used&#xff08;最近最少使用&#xff09;&#xff1a;也就是末尾淘汰法&#xff0c;新数据从链表头部加入&#xff0c;释放空间时从末尾淘汰数据。 1.当要访问某个页时&#xff0c;如果不在Buffer Pool中&#xff0c;需要把该…