MyBatisPlus之逻辑删除、MyBatisPlus解决并发问题的乐观锁机制

news2024/10/7 14:28:29

在这里插入图片描述

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaEE
操作系统

石可破也,而不可夺坚;丹可磨也,而不可夺赤。


MyBatisPlus

  • 一、 逻辑删除
    • 1.1 数据库表中添加逻辑删除标记字段
    • 1.2 实体类中添加对应字段,并设定当前字段为逻辑删除标记字段
    • 1.3配置逻辑删除字面值
  • 二、 乐观锁
    • 2.1 数据库表中添加锁标记字段
    • 2.2 实体类中添加对应字段,并设定当前字段为逻辑删除标记字段
    • 2.3 配置乐观锁拦截器实现锁机制对应的动态SQL语句拼装
    • 2.4 使用乐观锁机制在修改前必须先获取到对应数据的version方可正常进行

一、 逻辑删除

  • 删除操作业务问题:业务数据从数据库中丢失
  • 逻辑删除:为数据设置是否可用的状态字段,删除时设置状态字段为不可用状态,数据保存在数据库中。

1.1 数据库表中添加逻辑删除标记字段

在这里插入图片描述

1.2 实体类中添加对应字段,并设定当前字段为逻辑删除标记字段

public class User {
//    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    @TableField(value = "username")
    private String userName;
    @TableField(value = "password",select = false)
    private String passWord;
    private String gender;
    private String addr;
    @TableField(exist = false)
    private Integer online;
    //逻辑删除字段,标记当前记录是否被删除
    //1表示删除,0表示未删除
    @TableLogic(value = "0",delval = "1")
    private Integer deleted;
}

1.3配置逻辑删除字面值

mybatis-plus:
  global-config:
    banner: false
    db-config:
      logic-delete-field: deleted
      logic-delete-value: 1
      logic-not-delete-value: 0

执行SQL语句:UPDATE tb_user SET deleted=1 WHERE id=? AND deleted=0
执行结果:
在这里插入图片描述

二、 乐观锁

2.1 数据库表中添加锁标记字段

在这里插入图片描述

2.2 实体类中添加对应字段,并设定当前字段为逻辑删除标记字段

public class User {
//    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    @TableField(value = "username")
    private String userName;
    @TableField(value = "password",select = false)
    private String passWord;
    private String gender;
    private String addr;
    @TableField(exist = false)
    private Integer online;
    //逻辑删除字段,标记当前记录是否被删除
    //1表示删除,0表示未删除
    @TableLogic(value = "0",delval = "1")
    private Integer deleted;
    //实现乐观锁
    @Version
    private Integer version;
}

2.3 配置乐观锁拦截器实现锁机制对应的动态SQL语句拼装

@Configuration
public class MpConfig {
    @Bean
    public MybatisPlusInterceptor mpInterceptor() {
        //1.定义Mp拦截器
        MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
        //2.添加乐观锁的拦截器
        mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return mpInterceptor;
    }
}

2.4 使用乐观锁机制在修改前必须先获取到对应数据的version方可正常进行

void testUpdate() {
		//1.先通过要修改的数据id将当前的数据查询出来
		User user = userDao.selectById(4L);
		//2.将要修改的属性逐一设置进去
		user.setUserName("小小");
		userDao.updateById(user);
	}
  • 执行修改前先执行的查询语句:SELECT id,username,gender,addr,deleted,version FROM tb_user WHERE id=? AND deleted=0
  • 执行修改时使用version字段作为乐观锁检查依据:UPDATE tb_user SET username=?, gender=?, addr=?, version=? WHERE id=? AND version=? AND deleted=0

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

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

相关文章

广州华锐互动:3D数字孪生楼宇资产管理系统展示楼宇实时信息

3D数字孪生楼宇资产管理系统由广州华锐互动开发,是一种基于数字孪生技术的智能化展示平台,它可以将楼宇的各项数据进行实时展示,为楼宇的管理者和使用者提供便捷的信息查询和服务。以下是一些实用功能: 1.实时监控:实时…

问道管理:刚刚,“金九”来了?

今天早盘,A股商场可谓“全面开花”。 银行、白酒等权重板块携手发力,带动上证指数、深证成指半日涨超1%;北交所股票更是全线飘红,北证50指数盘中最大涨幅超越8%,半日上涨5.85%。 到午间休市,A股商场超越3…

【C++】智能指针(RAII)详解

我们在上篇文章中(异常处理详解)提到了 RAII 。那么本篇文章会对此进行详解。重点是智能指针的详解。其中会讲解到 RAII 思想、auto_ptr、unique_ptr、shared_ptr、weak_ptr、循环引用问题。希望本篇文章会对你有所帮助。 文章目录 一、为什么需要智能指…

【java】【项目实战】[外卖九]项目优化(缓存)

目录 一、问题说明 二、环境搭建 2.1 Git管理代码 2.1.1 创建本地仓库 2.1.2 创建远程仓库 2.1.3 创建分支--》推送到远程仓库 2.2 maven坐标 2.3 配置文件application.yml 2.4 配置类RedisConfig 三、缓存短信验证码 3.1 实现思路 3.2 代码改造 3.2.1 UserContro…

CS420 课程笔记 P5 - 内存编辑 数据类型

文章目录 IntroductionData typesBooleansNegative numbers (Signed integers)Floating-point numbers (fractional numbers) Unknown value scansHealth findingFloat finding (Player position hack / Teleport hack) Additional things Introduction 这节课将结束数据类型并…

POI实现word文档导出

1 需求 在列表页面中点击合同按钮,跳转到合同页面 页面中有下载按钮,点击下载按钮,把页面展示的内容导出到word中。 2 分析 2.1 POI操作Word的API介绍 poi对低版本的doc本身支持的就不好所以我们直接说高版本的docx版本的api。 1、poi…

朴素,word,任何参考文献导入endnote

朴素,word,任何参考文献导入endnote 注意:对于以下这几种不做阐述,看其他帖子都有讲述: 这里的参考文献指的是类似于: [1]. Li Y, Lu Y, Huo X, et al. Bandgap tuning strategy by cations and halide io…

【python零基础入门学习】python基础篇之文件对象open、模块以及函数的使用(三)

本站以分享各种运维经验和运维所需要的技能为主 《python》:python零基础入门学习 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ceph日常问题解…

【人月神话】重新探索人月神话:软件工程的现实与挑战

人月神话是一篇由美国软件工程师弗雷德里克布鲁克斯所写的软件工程经典之作,最早发表于1975年。这篇文章的全名是《人月神话:软件工程的神话与现实》(The Mythical Man-Month: Essays on Software Engineering),它涵盖…

智慧导览|智能导游系统|AR景区导览系统|景区电子导览

随着文旅市场的加快复苏,以及元宇宙、VR、AR、虚拟数字人等新兴技术的快速发展,文旅行业也正在加快数字化转型的步伐,向智慧景区建设迈进。为满足不同年龄段游客的游览需要,提升旅游服务体验,越来越多的旅游景区、博物…

BlueStore BlueFS rocksdb 关联性梳理

Tag: ceph 12.2.4 BlueStore空间初始化 BlueStore磁盘空间管理 总述 OSD挂载目录基于文件系统管理,Slow、WAL、DB空间区域基于裸盘管理;Slow区域:此类空间主要用于存储对象数据,由BlueStore管理,其中分配于BlueFS空…

如何将枯燥的大数据进行可视化处理?

在数字时代,大数据已经成为商业、科学、政府和日常生活中不可或缺的一部分。然而,大数据本身往往是枯燥的、难以理解的数字和文字,如果没有有效的方式将其可视化,就会错失其中的宝贵信息。以下是一些方法,可以将枯燥的…

Python入门 类class 基础篇

记住一句话:类是模板,而实例则是根据类创建的对象。 我初学时对类的理解是从类的字面上,可以片面的认为它是一个种类,它是相似特征的抽像,也就是相似的东西,可以把相似特征的事务抽象成一个类。&#xff0…

基于串口校时的数字钟设计

文章目录 设计目标硬件设计数码管串口 软件设计顶层模块串口接收模块数据处理模块时钟模块串口发送模块 总结 设计目标 环境:ACX720开发板 实现功能: 数码管能够显示时分秒能够接收串口数据修改时间能够将当前时间以1s一次速率发送到电脑 硬件设计 数…

java之SpringBoot基础篇、前后端项目、MyBatisPlus、MySQL、vue、elementUi

文章目录 前言JC-1.快速上手SpringBootJC-1-1.SpringBoot入门程序制作(一)JC-1-2.SpringBoot入门程序制作(二)JC-1-3.SpringBoot入门程序制作(三)JC-1-4.SpringBoot入门程序制作(四)…

virtualbox 扩展磁盘大小

此处设置完成后,还需要进入虚拟机,实际扩展磁盘大小 参考 https://zhuanlan.zhihu.com/p/319431032

搭一个shinyAPP就是一篇《Bioinformatics》?

写在前面 原本想引用一番shiny,结果并没有检索出shiny研发团队所发表的论文,倒是有诸多shiny爱好者搭建shinyApp所发表的文章。例如这篇题为“ShinyGO: a graphical gene-set enrichment tool for animals and plants”、于2020年发表于《Bioinformatic…

【AWS】如何用SSH连接aws上的EC2实例(虚拟机)?

目录 0.环境 1.连接结果示例 2.SSH连接思路 3.具体步骤 1)安装并运行ssh服务 2)启动ssh服务 3)在AWS上找到正在运行的EC2实例,并且根据提供的ssh连接语句进行连接 0.环境 windows 11 64位 前提: 有aws账户&…

B. Swap and Reverse

Problem - B - Codeforces 思路:这个题想复杂了,对于第一个条件,我们发现其实就是可以对所有的奇数位置之间任意交换,所有的偶数位置之间任意交换,对于第二个条件来说,如果k为奇数是没有意义的,…

2022年12月 C/C++(七级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程(1~8级)全部真题・点这里 第1题:走迷宫 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。 给定一个迷宫,求从左上角走到右下角最少需要走多少步…