正如大多數持久層框架一樣,mybatis 同樣提供了一級快取和二級快取的支援
一級快取: 基於perpetualcache 的 hashmap本地快取,其儲存作用域為session,當session flush 或 close之後,該session中的所有 cache 就將清空。
2.二級快取,如 ehcache。
3. 對於快取資料更新機制,當某乙個作用域(一級快取session/二級快取namespaces)的進行了 c/u/d 操作後,預設該作用域下所有 select 中的快取將被clear。
1package
me.gacl.test;23
import
me.gacl.domain.user;
4import
me.gacl.util.mybatisutil;
5import
org.apache.ibatis.session.sqlsession;
6import
org.junit.test;78
/**9
* @author
gacl
10* 測試一級快取
11*/
12public
class
testonelevelcache
59 }
<2、測試二級快取namespace
>
<
cache
/>
11. 對映語句檔案中的所有select語句將會被快取。package
me.gacl.test;23
import
me.gacl.domain.user;
4import
me.gacl.util.mybatisutil;
5import
org.apache.ibatis.session.sqlsession;
6import
org.apache.ibatis.session.sqlsessionfactory;
7import
org.junit.test;89
/**10
* @author
gacl
11* 測試二級快取
12*/
13public
class
testtwolevelcache
36 }
2. 對映語句檔案中的所有insert,update和delete語句會重新整理快取。
3. 快取會使用least recently used(lru,最近最少使用的)演算法來收回。
4. 快取會根據指定的時間間隔來重新整理。
5. 快取會儲存1024個物件
cache標籤常用屬性:
<cache
eviction
="fifo"
size="512"
readonly="true"/>
mybatis一級快取 二級快取
一級快取基於sqlsession,是預設開啟的,在運算元據庫時需要構造sqlsession物件,在物件中有乙個hashmap用於儲存快取資料。不同的sqlsession之間快取資料區域是互相不影響的。一級快取的作用域是sqlsession範圍的,當在同乙個sqlsession中執行兩次相同的sql語...
Mybatis 一級快取 二級快取
快取分類 一級快取 事務範圍 快取只能被當前事務訪問。快取的生命週期 依賴於事務的生命週期當事務結束時,快取也就結束生命週期。在此範圍下,快取的介質是記憶體。二級快取 程序範圍 快取被程序內的所有事務共享。這些事務有 可能是併發訪問快取,因此必須對快取採取必要的事務隔離機制。快取的生命週期依賴於程序...
mybatis一級快取二級快取
前面我們說到,spring和mybatis整合時,每次查詢之後都要進行關閉sqlsession,關閉之後資料被清空。所以spring整合之後,如果沒有事務,一級快取是沒有意義的。那麼如果開啟二級快取,關閉sqlsession後,會把該sqlsession一級快取中的資料新增到namespace的二級...