首页 > 编程语言 >MyBatisPlus——DML编程控制——乐观锁

MyBatisPlus——DML编程控制——乐观锁

时间:2023-04-10 15:16:04浏览次数:39  
标签:MyBatisPlus 编程 DML 乐观 修改 字段 version 添加 id

乐观锁

  • 业务并发现象带来的问题:秒杀最后一单
  • 用于中小型项目(2000请求以下)
  • 添加一个数据库字段,使每次请求修改数据时,这个字段就加一,当有多人同时请求时,这些人同时获取到的都是相同的该字段,但当有一人完成了秒杀后字段加一,其他同时获取到的该字段就不匹配了

配置步骤

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

  

  • 实体类中添加对应字段,并设定当前字段为乐观锁标记字段

  

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

  

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

  

    • 执行修改前先执行查询语句:
    • SELECT id,name,age,tel,deleted,version FROM tvl_user WHERE id=?
    • 执行修改时使用version字段作为乐观锁检查依据
    • UPDATE tbl_user SET name=?,age=?,tel=?,version=? WHERE id=? AND version=?

 

标签:MyBatisPlus,编程,DML,乐观,修改,字段,version,添加,id
From: https://www.cnblogs.com/1873cy/p/17302864.html

相关文章

  • MybatisPlus——DML编程控制——增删改
    DML编程控制id生成策略控制不同的表应用不同的id生成策略日志:自增(1,2,3,4,......)购物订单:特殊规则(FQ23948AK3843)外卖单:关联地区日期等信息(1004202003143491)关系表:可省略id......注解控制@TableId类型:属性注解位置:模型类中用于表示主键的属性定义上方作用:设置......
  • 命令式编程\声明式编程\函数式编程
    命令式编程(Imperative):详细的命令机器怎么(How)去处理一件事情以达到你想要的结果(What);声明式编程(Declarative):只告诉你想要的结果(What),机器自己摸索过程(How)。命令式编程是我们一步一步告诉机器需要怎么做,机器按部就班地执行命令。声明式编程是我们告诉机器我想要这样的结果,而不管他是怎......
  • C#编程之c#串口(winform、wpf)
    本文主要向大家介绍了C#编程之c#串口通信讲解(一)(winform、wpf),通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。串口操作需要注意的几点如下:1、如果是USB转串口;则需要安装USB转串口驱动,附件有此驱动。2、串口打开状态最好不要直接插拔串口,可能会导致中控板或者串口线烧坏。......
  • VS2019使用C语言进行websocket编程
    一直在写C#代码好多年不写C语言代码了,记录一下之前某个项目里用C写的一个websocket服务,用C的优势是写的东西体积小性能高,但是写业务的话还得用C#、Java之类的语言,不然会折腾死人。。。 用VisualStudio新建一个C++(因为不能直接建C语言项目)项目,我演示就创建一个控制台项目。项......
  • java并发编程(2):Java多线程-java.util.concurrent高级工具
    高级多线程控制类Java1.5提供了一个非常高效实用的多线程包:java.util.concurrent,提供了大量高级工具,可以帮助开发者编写高效、易维护、结构清晰的Java多线程程序。ThreadLocal类ThreadLocal类用来保存线程的独立变量。对一个线程类(继承自Thread)当使用ThreadLocal维护变......
  • java并发编程(1):Java多线程-基本线程类-基础知识复习笔记
    复习资料:《同步与异步:并发/并行/进程/线程/多cpu/多核/超线程/管程 》基本线程类基本线程类基本线程类指的是Thread类,Runnable接口,Callable接口继承Thread创建线程继承java.lang.Thread类创建线程是最简单的一种方法,也最直接。publicclassMyThread1extendsThread{}种......
  • Rust编程语言入门之cargo、crates.io
    cargo、crates.io本章内容通过releaseprofile来自定义构建在https://crates.io/上发布库通过workspaces组织大工程从https://crates.io/来安装库使用自定义命令扩展cargo一、通过releaseprofile来自定义构建releaseprofile(发布配置)releaseprofile:是预......
  • NOI / 1.8编程基础之多维数组 04:错误探测
    描述给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件。你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件。"改变矩阵元素"的操作定义为0变成1或者1变成0。输入输入n+1行,第1行为矩阵的大小n(0<n<100),以......
  • 结对编程-----四则运算
    本次结对编程我与2152710一起进行了四则运算的编程。这次采用python作为编程语音。小学生四则运算:两次运算,100 以内的数字,确保答案在 0..100 之间。以下是代码展示importrandomforiinrange(100):  a=random.randint(1,100)  b=random.randint(1,100......
  • 牛客-华为研发工程师编程题
    过于简单,至少目前这样的题做来没有意义1.汽水瓶intmain(){ //这个获取输入就不太常规 vector<int>in; stringtemp; //读入失败getline会返回一个空 while(getline(cin,temp)&&temp!="0"){ in.push_back(stoi(temp)); } //最多只借一个瓶子,这样凑成3......