mybatis 一級 二級快取的使用

2021-07-23 11:36:19 字數 1684 閱讀 4548

正如大多數持久層框架一樣,mybatis 同樣提供了一級快取二級快取的支援

一級快取: 基於perpetualcache 的 hashmap本地快取,其儲存作用域為session,當session flush 或 close之後,該session中的所有 cache 就將清空

2.二級快取,如 ehcache。

3. 對於快取資料更新機制,當某乙個作用域(一級快取session/二級快取namespaces)的進行了 c/u/d 操作後,預設該作用域下所有 select 中的快取將被clear。

1

package

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 }

<

namespace

>

<

cache

/>

2、測試二級快取

1

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 }

1. 對映語句檔案中的所有select語句將會被快取。

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的二級...