spring事务和mybatis缓存在某种不合理代码的使用情况下出现的问题

spring事务和mybatis缓存在某种不合理代码的使用情况下出现的问题

  • 直接上代码
    1、测试类
    2、普通的一个业务逻辑层调用(orm -mybatis)
    在这里插入图片描述
    3、看结果
    在这里插入图片描述
    4、问题总结
    1、这种代码的形式我写的比较直白,为了暂时直接的问题,不要吐槽我,也是为了说明问题
    2、简述流程:就是在同一个事物中,重复去提交同一个sqlSession 做查询结果,会用到mybatis 缓存;这个也是正常的;问题在于,如果在第一次拿到结果后对缓存做了操作改变了原本的值,导致第二次再调用查询时,正好使用了缓存结果,就会在视觉上造成逻辑没问题,但是结果是数据不对。仔细查看日志才会发现问题
    Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4684240f] from current transaction
    3、问题:
    1、业务代码逻辑有问题,同一个事务中多次调用会缓存的查询
    2、代码不够规范,变量需要制定单一职责。
    4、解决办法
    1、mybatis 缓存强制刷新(不建议,框架本没有错,只是没用好)
    2、代码重构 (1、不要在同一事务中重复调用多次相同会缓存的sql(别看demo 比较傻,但实际情况也会有复杂业务中,代码不规范情况下,会出现类似情况);2、对于局部变量的使用,尽量使用final ,需要接受计算结果的对象,最好使用新申明的对象去代替,一个多用,可能会出现意想不到的问题。3、定期重构代码)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值