阎王看孙悟空能活500岁很不爽,让判官甲给孙悟空削去400岁。过了一会阎王感觉削多了,让判官乙再去给加上孙悟空加上300岁,只削孙悟空100岁就行了。 没想到判官甲偷懒了,和判官乙近乎同时操纵的生死簿。这样甲拿出来是500岁,乙拿出来也是500岁。甲拿的500岁减去400岁变为100岁存入数据库,乙拿的500岁加上300岁变为800岁存入生死簿。没错判官甲的操作被覆盖了,孙悟空变成800岁了。
代码,建立测试文件
@Testvoid OptimisticLock(){Students student1 = studentsMapper.selectById(1);System.out.println("孙悟空的年龄 甲:" + student1.getAge());Students student2 = studentsMapper.selectById(1);System.out.println("孙悟空的年龄 乙:" + student2.getAge());student1.setAge(student1.getAge()-400);int result = studentsMapper.updateById(student1);System.out.println("甲是否更改年龄 : " + student1.getAge());student2.setAge(student2.getAge()+300);int result2 = studentsMapper.updateById(student2);System.out.println("乙是否更改年龄 : " + student2.getAge());}
运行结果:,,,,这里可以看到孙悟空的年龄变为了800岁,与阎王400岁的要求不符。


@Configuration
public class MpConfig {@Beanpublic MybatisPlusInterceptor MybatisPlusInterceptor(){MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();//配置mybatisplus分页拦截器interceptor.addInnerInterceptor(new PaginationInnerInterceptor());//添加乐观锁拦截器interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());return interceptor;}}

说明乙修改数据库的操作并没有进行。

测试结果变为了100,也说明判官乙的操作并没有并没有进行。

将乙更改年龄的代码修改为
student2.setAge(student2.getAge()+300);int result2 = studentsMapper.updateById(student2);System.out.println("乙是否更改年龄 : " + result2);if (result2 == 0){Students student3 = studentsMapper.selectById(student2);student3.setAge(student3.getAge()+300);int result3 = studentsMapper.updateById(student3);System.out.println("乙是否更改年龄 : " + result3);}
运行结果:

上一篇:vtk.js滚动切片