MyBatis 查詢快取(一級 二級)和逆向工程

2021-09-11 02:41:53 字數 1262 閱讀 7002

1. 查詢快取

一級快取 :同乙個sqlsession物件

mybatis預設開啟一級快取,如果用同樣的sqlsession物件查詢相同的資料,

則只會在第一次 查詢時 向資料庫傳送sql語句,並將查詢的結果 放入到sqlsession中(作為快取在);

後續再次查詢該同樣的物件時,

則直接從快取中查詢該物件即可(即省略了資料庫的訪問)    

二級快取

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

a.conf.xml

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

禁用 :select標籤中usecache="false"

清理:

a.與清理一級快取的方法相同

commit(); (一般執行增刪改時 會清理掉快取;設計的原因 是為了防止髒資料)

在二級快取中,commit()不能是查詢自身的commit。

commit會清理一級和二級快取;但是 清理二級快取時,不能是查詢自身的commit;

b. 在select標籤中 增加屬性 flushcache="true"

命中率:

1:  zs :0%  

2:    50%

3:   2/3    0.666

4:  3/4     0.75

三方提供的二級快取:

ehcache、memcache

要想整合三方提供的二級快取 (或者自定義二級快取),必須實現org.apache.ibatis.cache.cache介面,該介面的預設實現類是perpetualcache

整合ehcache二級快取:

a.ehcache-core.jar

mybatis-ehcache.jar

slf4j-api.jar

b.編寫ehcache配置檔案 ehcache.xml

2. 逆向工程

實現步驟:

a.  mybatis-generator-core.jar、mybatis.jar、ojdbc.jar

b.  逆向工程的配置檔案generator.xml

c.  執行

mybatis一級快取 二級快取

一級快取基於sqlsession,是預設開啟的,在運算元據庫時需要構造sqlsession物件,在物件中有乙個hashmap用於儲存快取資料。不同的sqlsession之間快取資料區域是互相不影響的。一級快取的作用域是sqlsession範圍的,當在同乙個sqlsession中執行兩次相同的sql語...

Mybatis 一級快取 二級快取

快取分類 一級快取 事務範圍 快取只能被當前事務訪問。快取的生命週期 依賴於事務的生命週期當事務結束時,快取也就結束生命週期。在此範圍下,快取的介質是記憶體。二級快取 程序範圍 快取被程序內的所有事務共享。這些事務有 可能是併發訪問快取,因此必須對快取採取必要的事務隔離機制。快取的生命週期依賴於程序...

mybatis一級快取二級快取

前面我們說到,spring和mybatis整合時,每次查詢之後都要進行關閉sqlsession,關閉之後資料被清空。所以spring整合之後,如果沒有事務,一級快取是沒有意義的。那麼如果開啟二級快取,關閉sqlsession後,會把該sqlsession一級快取中的資料新增到namespace的二級...