zoukankan      html  css  js  c++  java
  • MyBatisPlus乐观锁,乐观锁竟然如此简单

    乐观锁

    在编程过程中,我们经常会被问到乐观锁,悲观锁,都非常简单

    乐观锁:顾名思义,思想十分乐观,总是认为不会出现问题,无论什么都不去上锁!如果出现了问题,就再更新测试

    悲观锁:顾明思义,思想十分悲观,总是认为总会出现问题,无论什么都去上锁!再去操作

    我们主要来讲一下乐观锁机会

    官网的解释是这样的

    乐观锁:
    1. 先查询,获取版本号version = 1;
    A--线程
    update air set name = "chougoushi", version = version + i
    where id = 2 and version = 1
    B--线程如果抢先完成,这个时候version = 2, 会导致A修改失败
    update air set name = "chougoushi", version = version + i
    where id = 2 and version = 1
    

    测试一下MP(MybatisPLus)

    首先给实体类的表添加一个字段version

    给实体类添加属性version,添加@Version注解

    创建一个乐观锁的配置类

    测试乐观锁

    //测试乐观锁成功
        @Test
        public  void testOptimisticlocker(){
            //1.查询用户信息
            Air air = airMapper.selectById(1L);
            //2.修改用户信息
            air.setPm25(44);
            air.setPm10(899);
            //3.执行更新操作
            airMapper.updateById(air);
    
        }
    


    测试失败的乐观锁

        //测试乐观锁失败
        @Test
        public  void testOptimisticlocker2(){
    
            //线程1
            //1.查询用户信息
            Air air1 = airMapper.selectById(1L);
            //2.修改用户信息
            air1.setPm25(999);
            air1.setPm10(1000);
    
            //模拟另一个线程执行了插队操作
    
            //1.查询用户信息
            Air air2 = airMapper.selectById(1L);
            //2.修改用户信息
            air2.setPm25(4555);
            air2.setPm10(6666);
            //3.执行更新操作
            airMapper.updateById(air2);
            airMapper.updateById(air1);
        }
    

    先来看结果

    再看对应的sql分析一波

    我会写代码+代码改变世界=我会改变世界! 为什么要改变世界? 如果无法改变世界,那么,世界就会改变我......
  • 相关阅读:
    Django报错 No module named 'django.templates'
    Django 创建 hello world
    python(Django2.0) 安装
    create-react-app踩坑记
    Vue项目的痛点
    React 错误处理(componentDidCatch)
    Vue props双向绑定
    redux 中的 redux-thunk(中间件)
    webpack 搭建React(手动搭建)
    vue interceptors(拦截器)
  • 原文地址:https://www.cnblogs.com/chougoushi/p/13439809.html
Copyright © 2011-2022 走看看