栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis-plus处理乐观锁

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis-plus处理乐观锁

乐观锁假设数据一般情况不会造成冲突,只有在数据进行提交更新的时候,才会对数据的冲突与否进行检测;
乐观锁适用于读多写少的场景,这样可以提高程序的吞吐量;
通俗地说就是:当要更新一条记录的时候,希望这条记录没有被别人更新

乐观锁实现方式:

1.取出记录时,获取当前version;
2.更新时,带上这个version(只要记录被更新,version+1);
3.执行更新时, set version = newVersion where version = oldVersion;
4.如果version不对,就更新失败

Mybatis-plus实现乐观锁

1.数据库表新增version字段
2.表对应实体类新增version属性

  @Version   //代表是乐观锁
    private Integer version;

3.配置插件(在配置类中注册组件) 大公告成

@EnableTransactionManagement    //开启事务管理
@Configuration
public class MybatisConfig {

    //注册乐观锁
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}

4.模拟

    @Test
    void testOptimisticLocker2(){
        //查询用户信息(先拿到version,只要被更新一次version就会加一)
        User user = userService.getById(1L);     //version=2 ----user
        user.setName("第一次");
       //模拟多线程抢占
        User user1 = userService.getById(1L);   //version=2(数据库中version=2) -----user1
        user1.setName("第二次");
        userService.updateById(user1);          //version=3(数据库中version=3) -----user1

        userService.updateById(user);           //version=2 --user(数据库中version=3) 不匹配 更新失败     
        
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/631884.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号