码迷,mamicode.com
首页 > 其他好文 > 详细

MyBatis-Plus快速入门(二)

时间:2020-09-17 18:31:54      阅读:19      评论:0      收藏:0      [点我收藏+]

标签:用户   获得   clock   height   use   就会   修改   线程二   没有   

乐观锁

在面试过程中会经常问到乐观锁、悲观锁!常用字段:varsion、new varsion

乐观锁:顾名思义非常乐观,认为总是不会出现问题,无论干什么都不上锁,如果出现问题,更新值在测试!

悲观锁:顾名思义非常悲观,认为总是会出现问题,无论干什么都上锁,再去操作!

乐观锁实现方式:

  • 取出记录时,获取当前version
  • 更新时,带上这个version
  • 执行更新时, set version = newVersion where version = oldVersion
  • 如果version不对,就更新失败
乐观锁:
-- A  先查询,获得版本号version = 1
update user set name = " kuangshen", version = version + 1
where id = 2 and version= 1

-- B 线程抢先完成,这个时候version = 2,会导致A修改失败!
update user set name = "kuangshen", version = version + 1
where id= 2 and version = 1

测试乐观锁插件

1.给数据库新增 version 

技术图片

2.实体类添加varsion字段

@Version //乐观锁 version 注解
private Integer version;

3.注册组件

//扫描我们的 mapper文件夹
@MapperScan("com.ljj.mapper")
@EnableTransactionManagement
@Configuration  //配置类
public class MyBatisPlusConfig {
    //注册乐观锁插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}

mybatis-plus官网乐观锁插件方法:https://baomidou.com/guide/optimistic-locker-plugin.html#_1-%E6%8F%92%E4%BB%B6%E9%85%8D%E7%BD%AE

    //乐观锁测试 (成功测试)
    @Test
    public void OptimisticLocker(){
        //1.查询用户信息
        SysUser sysUser = userMapper.selectById(1L);
        //2.修改用户信息
        sysUser.setUsername("手残");
        sysUser.setPassword("111111");
        //3.执行更新操作
        userMapper.updateById(sysUser);
    }

    //乐观锁测试 (失败测试)
    @Test
    public void OptimisticLocker2(){
        //线程一
        SysUser sysUser = userMapper.selectById(1L);
        sysUser.setUsername("手残1");
        sysUser.setPassword("111111");

        //模拟另一个线程二 执行了插队操作
        SysUser sysUser2 = userMapper.selectById(1L);
        sysUser2.setUsername("手残2");
        sysUser2.setPassword("222222");
        userMapper.updateById(sysUser2);
        
        //自旋锁来执行多次提交
        userMapper.updateById(sysUser);//没有乐观锁就会覆盖插队操作的值
    }

执行后数据库更新的数据

技术图片

 

MyBatis-Plus快速入门(二)

标签:用户   获得   clock   height   use   就会   修改   线程二   没有   

原文地址:https://www.cnblogs.com/jjsir/p/13632794.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!