Mybatis的一級快取和二級快取機制
一級快取的應用(自動開啟,建立Sqlsession)
正式開發,是將mybatis和spring進行成和開發,事務控制在service中。一個service方法中包括很多mapper方法的呼叫。
Service 開始執行時, 開啟事務(建立sqlSession物件)
第一次呼叫 mapper 的方法 findUserById(1)
第二次呼叫mapper 的方法 findUserById(1) ,從一級快取中取資料。
方法結束,sqlSession 關閉。
SqlSession 一關閉 一級快取就消失。 或者 commit一下 更新時快取清空。
如果 執行兩次service ,呼叫相同的使用者資訊,不走一級快取,因為執行完第一個一級快取,
二級快取 (需要手動開啟快取)
SqlSession1 查詢使用者id為1的使用者資訊,查詢到的使用者資訊,查詢到使用者資訊在SqlSession1 的close時候會將查詢資料儲存到二級快取中。
SqlSession2 去查詢使用者的I為1的使用者,去快取中找是否存在資料,如果存在直接從快取中取出資料。
二級快取比一級快取的範圍更大,多個SQLSession可以共享一個Mapper的二級快取區域。 UserMapper 有自己的快取區域, OrderMapper 也有自己的快取區域。(每一個快取區域是按照namespace分的,有一個namespace
如果兩個mapper 的namespace 相同,那麼這兩個mapper 共享一個二級快取區域。
如果SqlSession3 去執行commit提交,那麼二級快取將會清空。
設定方法
1. 需要在 sqlMapConfig.xml 中 設定 setting標籤下
<!-- 開啟二級快取 二級快取總開關預設為FALSE -->
<setting name="cacheEnable" value="true"/>
2. 還需要在具體的mapper.xml 中設定開啟二級快取
在 mapper 標籤中 加入 <
3.設定pojo類實現序列化介面
pojo類實現 Serializable 介面即可。