首页 > 其他分享 >MybatisPlus入门(十一)MybatisPlus-乐观锁

MybatisPlus入门(十一)MybatisPlus-乐观锁

时间:2024-11-25 19:43:51浏览次数:8  
标签:十一 拦截器 MybatisPlus 入门 乐观 修改 version user userDao

  一、乐观锁


修改操作中的问题;乐观锁,琐是用来解决并发问题的。

例如秒杀业务, 上了100个秒杀单子, 如果到了最后一个, 8个人一起买,会出现问题,
卖出第0号 -1号 -2号,小型并发解决方案:乐观锁。

  二、Mybatis-Plus乐观锁实现步骤


Mybatis-Plus乐观锁实现步骤:

步骤一:数据库表中添加锁标记字段
数据库加字段;user表 添加version字段, 默认值设置为1


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

 

public class User {
  private Long id;
   @Version
  private Integer version;
}

 


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

需求:执行修改操作SQL拼接添加条件,开拦截器,像分页拦截器一样;

update set abc=1,version = version + 1 where version =1

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

 


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

 

       //1.先通过要修改的数据id将当前数据查询出来
        User user = userDao.selectById(3L);
        //2.将要修改的属性逐一设置进去
        user.setName("Jock888");
        userDao.updateById(user);

 


演示并发修改测试:

       //1.先通过要修改的数据id将当前数据查询出来
        User user = userDao.selectById(3L);     //version=3
 
        User user2 = userDao.selectById(3L);    //version=3
        //2.将要修改的属性逐一设置进去
        user2.setName("Jock aaa");
        userDao.updateById(user2);              //version=>4
        
        //2.将要修改的属性逐一设置进去
        user.setName("Jock bbb");
        userDao.updateById(user);               //verion=3,条件不成立,修改失败

 


测试成功。

标签:十一,拦截器,MybatisPlus,入门,乐观,修改,version,user,userDao
From: https://www.cnblogs.com/kongsq/p/18568476

相关文章

  • 【C++入门】顺序结构
    1. 程序流程顺序结构意味着程序中的每条语句都是按照它们在源代码中出现的顺序执行的。这就像阅读一本书,从第一页开始,逐页翻阅直到最后一页。在编程中,这意味着计算机按照从上到下的顺序执行指令,直到程序结束。2. 执行过程编译阶段:在程序运行之前,首先需要经过编译器的编译......
  • 嵌入式从入门到入土(Linux1)
    学习目标:认识嵌入式系统常用目录命令:快捷键主要目录结构:路径的概念Linux系统的文件类型通配符学习内容:嵌入式系统是什么?​​​​​​​**专业定义:**嵌入式系统是以应用为中心,基于计算机技术,具备软硬件可裁剪特性,并对功能、可靠性、成本、体积和功耗等有严格要......
  • C++命运石之门代码抉择:C++入门(上)
    文章目录1.前言1.1什么是C++1.2C++的发展1.3C++的重要性1.4如何学习C++1.5C++要学什么2.C语言过渡到C++(上)2.1域2.1.1命名空间2.1.1.1定义2.1.1.2作用域限定符2.1.1.3使用2.1.2域的使用优先级2.2输入及输出2.2.1std命名空间及自定义命名空间2.2.2.C+......
  • MybatisPlus入门(十)MybatisPlus-逻辑删除和多记录操作
    一、Mybatis-Plus多记录操作按照主键删除多条记录List<Long>ids=Arrays.asList(newLong[]{2,3})userDao.deleteBatchIds(ids);示例代码如下:@TestvoidtestDelete(){//删除指定多条数据List<Long>list=newArrayList<>();......
  • MybatisPlus入门(九)MybatisPlus-DML编程控制
    增删改InsertDeleteUpdate操作中的一些问题。一、主键生成策略增加的时候主键生成的问题,不同的环境、不同的场景对应的主键生成策略可能是不一样的,比如日志表、购物订单表、外卖单。  主键生成策略设置方法:  示例代码:packagecom.it.domain;importco......
  • 从入门到略懂 - 深入了解提示词工程
    提示工程,也称为上下文提示,是指如何与LLM进行沟通,以在不更新模型权重的情况下引导其行为以实现所需结果的方法。这是一门经验科学,提示工程方法的效果在不同模型之间可能存在很大差异,因此需要大量的实验和启发式方法。这篇文章只关注自回归语言模型的快速工程,因此不涉及Cl......
  • 深度学习入门- 梯度(Gradient)(三)
    一.手算梯度1.计算下列函数的梯度,并写明过程。    理论依据是前面两文学习过的:    链式法则:复合函数的导数可以用构成复合函数的各个函数的导数的乘积表示。    偏导数是多元函数时:将某一个变量定为目标变量,并将其他变量固定为某个值。    ......
  • 梧桐数据库v5版本的基本使用-入门篇
    一、命令行登录客户端在开始使用梧桐数据库之前,你需要通过命令行客户端工具登录到数据库。打开你的终端或命令提示符,使用以下命令登录:psql-hipaddress-pport-Uusername-ddatabasename这里的ipaddress是数据库的ip地址,port指的是数据库开放连接的端口号,username是......
  • Shiro权限控制入门
    本文分享自天翼云开发者社区《Shiro权限控制入门》,作者:l****nShiro权限控制是一款优秀的Java安全框架,可用于对Java应用程序进行身份验证、授权、加密和会话管理等功能。本文将简要介绍Shiro权限控制框架的几个关键概念和使用方法。1.认证Shiro的认证功能通常是用户登录系统的第......
  • 【人工智能】基于PyTorch的深度强化学习入门:从DQN到PPO的实现与解析
    《PythonOpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门!深度强化学习(DeepReinforcementLearning)是一种结合深度学习和强化学习的技术,适用于解决复杂的决策问题。深度Q网络(DQN)和近端策略优化(PPO)是其中两种经典的算法,被广泛应用于游戏、机器人控制等任务中。本......