title: mybatis中的快取
tags: 新建,模板,小書匠
想要了解mybatis中的快取機制,我們先來看什麼是快取,簡單來說,快取就是存在於記憶體中的臨時資料。
那麼,我們為什麼要使用快取呢,就是為了減少與資料庫的互動次數,提高執行效率。
那麼問題來了,什麼樣的資料適合存在於快取中呢:首先是經常使用且不經常進行增刪改查的資料,再有便是資料的正確性對結果影響不大的資料。
於是自然就有不適用使用快取的資料:經常改變的資料以及資料的正確性對結果影響很大的資料就不適合用快取去處理。
mybatis中的一級快取與二級快取
一級快取是指存在於sqlsession物件中的快取,當我們執行完一次查詢後,sqlsession物件會將我們的查詢結果儲存在乙個map中,當我們再次執行查詢,sqlsession會首先從該map中查詢資料,若能夠查到,則直接返回。查不到則執行查詢。值得注意的是,一級快取依託於sqlsession存在,若sqlsession物件消失,一級快取消失。
同時還應注意:呼叫sqlsession物件的close(),commit(),以及資料的增刪改時,都會清空一級快取。
二級快取
二級快取指的是sqlsessionfactory物件中的快取,是由乙個sqlsessionfactory建立出來的sqlsession共享一塊資料
二級快取的使用步驟:
在sqlmapconfig.xml中開啟設定支援二級快取
在當前對映檔案中配置支援二級快取
在當前方法select中支援二級快取
select * from user where id = #;
以圖為證
我們可以看到只執行了一次查詢,第二次是使用了快取直接查詢,但是有建立了乙個新的user物件,這是什麼原因呢。
因為二級快取中資料的儲存形式不是以物件形式儲存,更像是以列表型別的資料,當從快取中拿出資料時,會將列表中的資料封裝成物件,這也就是兩次物件不一致的原因。
MyBatis中的快取
mybatis作為持久化框架,提供了非常強大的快取特性。一般在提到mybatis快取的時候,指的都是二級快取。一級快取,即本地快取,缺省會啟用並且不能控制,可能會導致一些難以發現的錯誤。一 一級快取 public void testl1cache finally system.out.println...
mybatis中的快取
存在於記憶體中的臨時shuju 減少和資料庫的互動次數,提高效率 它指的是mybatis中sqlsession物件的快取。當我們執行查詢之後,查詢的結果同時會存入到sqlsession為我們提供的一塊區域當中。該區域的結構是乙個map結構。當我們再次查詢同樣的資料時,mybatis會先去sqlses...
mybatis中的快取
mybatis中的快取和hibernate的快取類似,也分為一級快取和二級快取 一級快取 為sqlsession級別的快取。預設開啟。使用同乙個sqlsession執行查詢時,會先從sqlsession的快取中去獲取資料,如果快取中不存在,再去資料庫中查詢,並將查詢結果快取到sqlsession。特...