1.MybatisPlus(二)MybatisPlus入门案例2.MybatisPlus(一)MybatisPlus简介3.MybatisPlus(三)MybatisPlus CRUD操作4.MybatisPlus(四)MybatisPlus分页5.MybatisPlus(五)MybatisPlus条件查询6.MybatisPlus(六)MybatisPlus-空值处理7.MybatisPlus(七)MybatisPlus-DQL编程控制(上)8.MybatisPlus(八)MybatisPlus-DQL编程控制(下)9.MybatisPlus(九)MybatisPlus-DML编程控制10.MybatisPlus(十)MybatisPlus-逻辑删除和多记录操作
11.MybatisPlus(十一)MybatisPlus-乐观锁
12.MybatisPlus(十二)Mybatis-Plus 代码生成器一、乐观锁
修改操作中的问题;乐观锁,琐是用来解决并发问题的。
例如秒杀业务, 上了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,条件不成立,修改失败
测试成功。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)