一級快取:同乙個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 全域性性設定懶載入。如果設為 ...