MyBatis查詢快取

2021-10-07 23:06:26 字數 817 閱讀 9747

一級快取:同乙個sqlsession物件,mybatis預設開啟一級快取。

如果用同樣的sqlsession物件查詢相同的資料,則只會在第一次查詢時向資料庫傳送sql語句,並將查詢結果放入到sqlsession中(作為快取存在),後續再次查詢該同樣的物件時,則直接從快取中查詢該物件即可(即省略了資料庫的訪問)。當sqlsession執行commit()方法,則清除所有快取物件。

mybatis預設情況下沒有開啟二級快取,需要手工開啟。

第一步:在conf.xml檔案中開啟二級快取

<

!-- 開啟二級快取 --

>

"cacheenabled" value=

"true"

/>

<

/settings>

>

<

!-- 宣告此namespace開啟二級快取 --

>

>

mybatis二級快取是將物件放入硬碟檔案中,執行快取的物件必須實現序列化介面。

序列化:將記憶體的資料轉換為二進位制**放入硬碟

反序列化:將硬碟中的資料放入記憶體

序列化student類時,還要序列化student類的級聯屬性以及父類

觸發將物件寫入二級快取的時機:sqlsession的close方法。

二級快取的清理:

commit()方法可以清理快取,一般執行增刪改時會清理掉快取,設計的原因時為了防止髒資料,在二級快取中,commit()不能是自身sqlsession呼叫的commit()方法。

MyBatis 第4章 查詢快取

根據作用域和生命週期分為兩種 一級快取 同一執行緒 sqlsession 間共享快取,sqlsession一旦關閉,快取將不復存在。一級快取只要用就有,一直處於開啟狀態。二級快取 不同執行緒間共享快取 不同sqlsession 同乙個namespace 與整個應用生命週期是一致的 按照namespa...

mybatis 多次查詢快取的問題

size medium 最近在使用mybatis的過程中,發現乙個問題。如果在同乙個事物中,多次同乙個查詢sql在mybatis的執行過程中,只會查詢一次資料庫,後幾次所返回的物件是mybatis在在內部做了快取。size property property this.findbypropertyi...

Mybatis延遲載入和查詢快取

在全域性配置引數設定開啟延遲載入總開關 name lazyloadingenabled value true name aggressivelazyloading value false settings 設定項 描述允許值 預設值lazyloadingenabled 全域性性設定懶載入。如果設為 ...