使用环境
MySQL 8.0
Druid 1.1.21
一 结论
在service方法上使用@Transactional(readOnly = true)注解时,能保证重复查询某一条数据不会出现数据不同的情况。若是没有添加该注解那么执行A查询时,中间该条数据发生修改,B查询时会读取已修改的数据,此现象称之为“不可重复读”。温故而知新一下,所谓“不可重复读”:对于两个事务T1和T2,T1读取了一个字段,然后T2更新了该字段并提交之后,T1再次提取同一个字段,值便不相等了(手动滑稽0~0)
二测试结果
所有的理论都需要建立于实践之上才显得更有意义~~~!!!
1)不添加@Transactional(readOnly = true)注解
结果:
2)添加@Transactional(readOnly = true)注解
记得重启项目测试哦,因为spring采用的是动态代理,也就是说项目启动的时候会动态去创建代理类
结果:
先执行第一个查询方法
然后我手动修改数据库
执行第二个查询方法
结果集与第一个查询方法保持一致,不会出现“不可重复读”咯,所以最后大家根据实际情况添加注解哦,一般来讲有多个查询的组合时最好还是添加一下该注解哦