1. 程式人生 > >Mybatis的一級快取和二級快取機制

Mybatis的一級快取和二級快取機制

一級快取的應用(自動開啟,建立Sqlsession

正式開發,是將mybatisspring進行成和開發,事務控制在service中。一個service方法中包括很多mapper方法的呼叫。

Service  開始執行時, 開啟事務(建立sqlSession物件)

第一次呼叫 mapper  的方法 findUserById(1)

第二次呼叫mapper 的方法  findUserById(1) ,從一級快取中取資料。

方法結束,sqlSession 關閉。

SqlSession 一關閉 一級快取就消失。 或者 commit一下 更新時快取清空。

如果  執行兩次service ,呼叫相同的使用者資訊,不走一級快取,因為執行完第一個一級快取,

SqlSession 已經被清空。走二級快取。

二級快取  (需要手動開啟快取)

SqlSession1 查詢使用者id1的使用者資訊,查詢到的使用者資訊,查詢到使用者資訊在SqlSession1 close時候會將查詢資料儲存到二級快取中。

SqlSession2 去查詢使用者的I1的使用者,去快取中找是否存在資料,如果存在直接從快取中取出資料。

二級快取比一級快取的範圍更大,多個SQLSession可以共享一個Mapper的二級快取區域。 UserMapper 有自己的快取區域, OrderMapper 也有自己的快取區域。(每一個快取區域是按照namespace分的,有一個namespace

mapper 就有一個二級快取區域。)

如果兩個mapper namespace 相同,那麼這兩個mapper 共享一個二級快取區域。

如果SqlSession3 去執行commit提交,那麼二級快取將會清空。

設定方法

1. 需要在 sqlMapConfig.xml 中 設定 setting標籤下

  <!-- 開啟二級快取 二級快取總開關預設為FALSE -->

    <setting name="cacheEnable" value="true"/>

2. 還需要在具體的mapper.xml 中設定開啟二級快取

mapper 標籤中 加入     <

cache/>

3.設定pojo類實現序列化介面

 pojo類實現 Serializable 介面即可。