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 應該放在哪個物件裡面去維...