關於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
