Mybatis-Plus 多记录操作与逻辑删除

news2024/10/7 12:24:20

目录

多记录操作

逻辑删除

问题引入

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

实现步骤

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

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


  • 多记录操作

  • 程序设计出来一个个删除的话还是比较慢和费事的,所以一般会给用户一个批量操作,提升用户体验
  • 以批量删除为例
  • 先看看对应API

  • 删除(根据ID批量删除),参数是一个集合,可以存放多个id值
  • 需求:根据传入的id集合将数据库表中的数据删除掉
  • 除了按照id集合进行批量删除,也可以按照id集合进行批量查询
  • 还是先来看下API

  • 查询(根据ID批量查询),参数是一个集合,可以存放多个id值
  • 需求:根据传入的ID集合查询用户信息
  • 逻辑删除

  • 问题引入

  • 先来分析下问题:
  • 这是一个员工和其所签的合同表
  • 关系是一个员工可以签多个合同,是一个一(员工)对多(合同)的表
  • 员工ID为1的张业绩,总共签了三个合同
  • 如果此时他离职了,我们需要将员工表中的数据进行删除,会执行delete操作
  • 如果表在设计的时候有主外键关系,那么同时也得将合同表中的前三条数据也删除掉
  • 后期要统计所签合同的总金额
  • 就会发现对不上,原因是已经将员工1签的合同信息删除掉了
  • 而如果只删除员工不删除合同表数据
  • 那么合同的员工编号对应的员工信息不存在,那么就会出现垃圾数据,就会出现无主合同,根本不知道有张业绩这个人的存在
  • 所以经过分析,不应该将表中的数据删除掉
  • 而是需要进行保留,但是又得把离职的人和在职的人进行区分,这样就解决了上述问题
  • 区分的方式,就是在员工表中添加一列数据deleted
  • 如果为0说明在职员工,如果离职则将其改完1,(0和1所代表的含义是可以自定义的)
  • 所以对于删除操作业务问题来说有:

    • 物理删除:业务数据从数据库中丢弃,执行的是delete操作
    • 逻辑删除:为数据设置是否可用状态字段,删除时设置状态字段为不可用状态,数据保留在数据库中,执行的是update操作
  • 实现步骤

  • 步骤1:修改数据库表添加deleted列
  • 字段名可以任意,内容也可以自定义
  • 比如0代表正常,1代表删除
  • 可以在添加列的同时设置其默认值为0正常
  • 步骤2:实体类添加属性
  • (1)添加与数据库表的列对应的一个属性名,名称可以任意
  • 如果和数据表列名对不上,可以使用@TableField进行关系映射,如果一致,则会自动对应
  • (2)标识新增的字段为逻辑删除字段,使用@TableLogic

  • 步骤3:运行删除方法
  • 从测试结果来看,逻辑删除最后走的是update操作
  • 会将指定的字段修改成删除状态对应的值
  • 逻辑删除,对查询有没有影响呢?

  • 执行查询操作

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

  • 可想而知,MP的逻辑删除会将所有的查询都添加一个未被删除的条件
  • 也就是已经被删除的数据是不应该被查询出来的
  • 如果还是想把已经删除的数据都查询出来该如何实现?

  • 如果每个表都要有逻辑删除,那么就需要在每个模型类的属性上添加@TableLogic注解,如何优化?
  • 在配置文件中添加全局配置即可

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

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

相关文章

OpenMP Parallel Construct 实现原理与源码分析

OpenMP Parallel Construct 实现原理与源码分析 前言 在本篇文章当中我们将主要分析 OpenMP 当中的 parallel construct 具体时如何实现的,以及这个 construct 调用了哪些运行时库函数,并且详细分析这期间的参数传递! Parallel 分析——编…

逆序遍历List集合

1 问题手写一个程序,完成List集合对象的逆序遍历2 方法创建List接口的多态对象向创建好list集合添加元素使用hasPrevious方法。import java.util.ArrayList;import java.util.List;import java.util.ListIterator;public class TestList { public static void ma…

如何好好说话第11章 攀登抽象之梯

在心里面放一把抽象之梯我们要时刻去概括。从更宏观的角度去理解我们当前所处的事情。抽上之梯的这个概念,在写作教材中常常出现。他指引我们写作的时候,不要站在梯子的中间。要么具体详实,要么抽象而精简短小。为什么不要站在梯子中间呢&…

蓝桥杯 stm32 MCP4017

本文代码使用 HAL 库。 文章目录前言一、MCP4017 的重要特性二、MCP4017 计算 RBW 阻值三、MCP4017 地址四、MCP4017 读写函数五、CubeMX 创建工程 (利用 ADC 测量 MCP4017 电压)、对应代码:总结前言 一、MCP4017 的重要特性 蓝桥杯 板子上…

冯诺依曼体系结构及操作系统(OS)的简单认识

文章目录冯诺依曼体系结构操作系统(Operator System)冯诺依曼体系结构 冯诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储结构。数学家冯诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑…

虚拟机的介绍及安装

文章目录虚拟机介绍VMware WorkStation安装在VMware上安装Linux远程连接Linux系统虚拟机介绍 通过虚拟化技术,在电脑内,虚拟出计算机硬件,并给虚拟的硬件安装操作系统,即可得到一台虚拟的电脑,称之为虚拟机。 VMware…

Ubuntu安装wordpress

这里写自定义目录标题开始环境安装打开参考链接开始 环境 这里安装的php是7.4版本, apt install apache2 php mariadb-server apt install php7.4-mysql php-dev记得需要单独安装php7.4-mysql,不然可能会报错连接数据库出错,中电是wp_chec…

(机械师T90外接显卡GTX-1080)Win10笔记本通过M.2接口外接独立显卡+解决错误代码43

文章目录前言一、硬件清单二、硬件安装1.插入转接卡2.显卡安装3.接入电源4.连接显示器三、驱动安装(重点)1.禁用笔记本独显2.卸载驱动3.安装新驱动4.解决错误代码43外接显卡使用体验前言 据外接显卡成功也快有一个月了,期间畅玩了刺客信条奥…

【C进阶】程序环境和预处理

⭐博客主页:️CS semi主页 ⭐欢迎关注:点赞收藏留言 ⭐系列专栏:C语言进阶 ⭐代码仓库:C Advanced 家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们…

新年快到了,如何运用Python实现春联

这篇博文可能写晚了,现在已经是初五了,哈哈!小编也是最近才想到的,看到老爸去年二十九(或者三十)在写春联,当时觉得他写的好慢啊!(不过让我来写,肯定不行!),于是萌生了用小编所学知识实现春联,只不过家里面没有打印机,不然代码写完之后,之后直接用打印机打印出来就…

【汤姆猫的实现 Objective-C语言】

一、实现之后的效果 1.左边3个按钮,分别是 1)点击之后,汤姆猫掏出一只白色的小鸟,刚要吃,它飞走了, 2)汤姆猫放屁 3)汤姆猫喝牛奶, 右边3个按钮,分别是 1)汤姆猫用爪子把屏幕抓出3个道子, 2)汤姆猫用披萨饼砸屏幕, 3)汤姆猫拿出两个锣,对着一敲, 2.这…

Java 23种设计模式(7.结构型模式-装饰者模式)

结构型模式-装饰者模式 代码分析 类图 代码 abstract class Component {abstract void operation(); }public class ConcreteComponent extends Component {void operation() {System.out.println("具体类");} }public class Decorator extends Component{private …

为向IPv6过渡的组织发布安全指南

美国国家安全局 (NSA) 已发布指南,以帮助国防部 (DoD) 和其他系统管理员识别和减轻与过渡到互联网协议版本 6 (IPv6) 相关的网络风险。 IPv6 由互联网工程任务组 (IETF) 开发,是用于识别和定位系统并在互联网上路由流量的协议的最新版本,提供…

统计学习方法 学习笔记(5)决策树

决策树5.1.决策树模型与学习5.2.特征选择5.3.决策树的生成5.4.决策树的剪枝5.5.CART算法决策树基本概述: 算法类别:一种基本的分类和回归方法;基本结构:呈现树形结构,在分类问题中表示基于特征对实例进行分类的过程。…

云原生之使用docker部署Postgresql数据库

云原生之使用docker部署Postgresql数据库一、Postgresql介绍1.PostgreSQL简介2.PostgreSQL的特点二、检查本地docker环境1.检查系统版本2.检查docker版本3.检查docker状态三、下载Postgresql镜像四、部署Postgresql数据库1.创建Postgresql容器2.查看Postgresql容器状态3.查看Po…

通配符的匹配很全面, 但无法找到元素 ‘context:component-scan‘ 的声明。

HTTP状态 500 - 内部服务器错误 类型 异常报告 消息 Servlet[springMVC]的Servlet.init()引发异常 描述 服务器遇到一个意外的情况,阻止它完成请求。 例外情况 javax.servlet.ServletException: Servlet[springMVC]的Servlet.init&#x…

一文看懂Linux基础

文章目录什么是Linux操作系统window和linux的对比快照的拍摄Linux的文件结构kali Linux的简单介绍基础命令vim命令文件权限kali的常见工具查看命令1.查看操作:2.删除操作:3.复制操作:4.移动操作:5.重命名操作:7.上传文…

【时间复杂度和空间复杂度】

1.时间复杂度时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个数学函数,它定量描述了该算法的额外运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起…

Linux系统用户和权限

文章目录root用户用户、用户组管理查看权限控制修改权限控制 - chmod修改权限控制 - chownroot用户 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 在Linux系统中,拥有最大权限的账户名为:root(超级管理员) …

机器学习(七):Azure机器学习模型搭建实验

文章目录 Azure机器学习模型搭建实验 前言 Azure平台简介 Azure机器学习实验 Azure机器学习模型搭建实验 前言 了解Azure机器学习平台,知道机器学习流程。 Azure平台简介 Azure Machine Learning(简称“AML”)是微软在其公有云Azure上推…