关于mybatis和spring整合后的一级缓存


关于mybatis和spring整合后的一级缓存

当单独使用mybatis的时候,一级缓存是起作用的,在一个session中查询2遍同样的sql,只会打印一次sql语句。但当mybatis与spring搭配使用后,mybatis的一级缓存就会失效,会打印2次sql。

即当mybatis放入spring中后,mybatis的一级缓存会失效。

原因是:

mybatis和spring结合使用的时候,将原本的DefaultSqlSession替换成了SqlSessionTemplate,并且在SqlSessionTemplate将sqlSession替换成了代理对象,当我们执行sqlSession.selectList方法的时候会调用到SqlSessionInterceptor的invoke方法, 在invoke方法的fianlly中调用了SqlSessionUtils.closeSqlSession(sqlSession, SqlSessionTemplate.this.sqlSessionFactory)将我们的session关闭了。原生的mybatis之所以没有关闭session是因为它把session暴露给我们了,而和spring结合使用的时候并没有提供暴露session的方法,所以只能在这里关,而一旦session关闭了,那一级缓存自然也就失效了。
————————————————
原文链接:https://blog.csdn.net/qiuz1024/article/details/100534709


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM