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的二級...