关于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