Mybatis快取詳解

2022-04-10 23:04:38 字數 2164 閱讀 1646

mybatis的一級快取是關閉不掉的,預設開啟的,也正是因為關閉掉,所以才存在了statement的級別,粒度再次調小,不再是sqlsession,而是statement級別。每次執行語句,都會清除快取。

@cachenamespace(

implementation = myconfig.class, //快取實現類,內部維護乙個hashmap(或其他),將命名空間作為鍵,存放下面的hashmap

eviction = fifocache.class,

//四中取值 fifocache lrucache weakcache softcache

flushinterval=150000,

//維護的hashmap最大值

size = 1024,

//維護資料可不可以更改

readwrite=bool,

// 讀快取堵塞不堵塞

blocking=bool

)eviction

lru:移除最長時間不被使用的物件,這是預設值。

fifo:按物件進入快取的順序來移除它們。

soft:移除基於垃圾**器狀態和軟引用規則的物件。

weak:更積極地移除基於垃圾收集器狀態和弱引用規則的物件。

flushinterval

可以被設定為任意的正整數,而且它們代表乙個合理的毫秒形式的時間段。預設情況不設定,即沒有重新整理間隔,快取僅僅在呼叫語句時重新整理。

size

可以被設定為任意正整數,要記住快取的物件數目和執行環境的可用記憶體資源數目。預設值是1024 。

readonly

屬性可以被設定為 true 或 false。唯讀的快取會給所有呼叫者返回快取物件的相同例項,因此這些物件不能被修改,這提供了很重要的效能優勢。

可讀寫的快取會通過序列化返回快取物件的拷貝,這種方式會慢一些,但是安全,因此預設是 false。

註解配置

@cachenamespace(

implementation = myconfig.class,實現cache介面即可

eviction = fifocache.class,

flushinterval=150000,

size = 1024

)

@cachenamespace

配置快取儲存的方案

@cachenamespaceref

與xml配置檔案共同使用

@options

usecache=true, flushcache

代替xml配置中的useflush 方法執行前重新整理記憶體,不用在手動重新整理快取

flushstatement

每次執行sql語句都會清除excutor中的快取資料

clearcache

清除excutor中維護的persistentcache維護的hashmap

commit

commit清除,實質內部呼叫flushstatemen和clearcache

close

sqlsession關閉,會自己清除sqlsession中的換粗

public static void main(string args) throws ioexception, interruptedexception

//實體

public class book

public void setbid(string bid)

public string gettitle()

public void settitle(string title)

public string getauthor()

public void setauthor(string author)

@override

public string tostring() ';}}

**於

MyBatis 快取詳解 一級快取驗證

基於mybatis standalone 工程,注意演示一級快取需要先關閉二級快取,localcachescope 設定為session 判斷是否命中快取 如果再次傳送sql 到資料庫執行,說明沒有命中快取 如果直接列印物件,說明是從記憶體快取中取到了結果。1 在同乙個session 中共享 2 不...

mybatis一級快取詳解

1.mybatis一級快取 一級快取 sqlsession快取 會話快取 預設開啟,使用者不能關閉 有方法讓其失效 通過同乙個sqlsession呼叫同乙個查詢方法兩次,第二次查詢走的快取。下面我們就看看一級快取怎麼儲存的?在建立sqlsession的時候會建立executor baseexecut...

MyBatis 快取詳解 一級快取(本地快取)介紹

一級快取也叫本地快取,mybatis 的一級快取是在會話 sqlsession 層面進行快取的。mybatis 的一級快取是預設開啟的,不需要任何的配置。首先我們必須去弄清楚乙個問題,在mybatis 執行的流程裡面,涉及到這麼多的物件,那麼快取perpetualcache 應該放在哪個物件裡面去維...