在實際專案中,通常對資料庫查詢的效能要求很高,而mybatis提供了查詢快取來快取資料,從而達到提高效能的要求。
一級快取可用性:
一級快取基於sqlsession,sqlsession又是單執行緒不共享的。所以只能在本次請求中使用,而如果本次請求有commit操作,比如update、insert、delete,那麼快取就會被重新整理。簡單來說,只有連續兩次執行相同語句,一級快取才有效果,比如:
select*from
tb_user // 執行一次sql語句
select
*from tb_user // 快取查詢
而如果有commit操作
select*from
tb_user // 執行一次sql語句
update tb_user set name =
'lay
'where id =
1 // commit 操作,清除了快取
select
*from tb_user // 第二次執行查詢sql
第一種情況,個人認為基本上不太會出現。所以一級快取在一定程度上來說,基本上沒有用。
二級快取可用性:
select*from tb_user //
第乙個sqlsession進來
select
*from tb_user // 第二個sqlsession進來,查詢到的是第乙個sqlsession的快取資料
快取清空的情況
select*from tb_user //
乙個sqlsession進來
update tb_user set name =
'lay
'where id =1//
執行了commit操作,清空快取
select
*from tb_user // 第二個sqlsession進來,得重新執行sql
比如:select
*from tb_user //
select
*from
tb_class a
left
join tb_user b on a.userid = b.id //
update tb_user set name =
'lay
'where id =1//
select
*from
tb_class a
left
mybatis快取機制
mybatis和hibernate一樣,也提供了一二級快取。若存在一二級快取,則資料不會去資料庫互動,而是去記憶體中獲取。一級快取是sqlsession級別的快取。在運算元據庫時需要構造sqlsession物件,在物件中有乙個資料結構 一般來說是hashmap 來儲存快取資料。不同的sqlsessi...
MyBatis 快取機制
mybatis 提供了查詢快取來獲取資料,以提高查詢的效能。mybatis 的快取分為一級快取和二級快取。1 一級快取一級快取是 sqlsession 級別的快取,是基於 hashmap 的本地快取。不同的 sqlsession 之間的快取資料區域互不影響。當同乙個 sqlsession 執行兩次相...
Mybatis 快取機制
查詢快取主要是為了提高查詢訪問速度,即當使用者執行一次查詢後,會將該資料結果放到快取中,當下次再執行此查詢時就不會訪問資料庫了而是直接從快取中獲取該資料。如果在快取中找到了資料那叫做命中。同一sqlsession 多次查詢同一sql時會使用快取 test public void testlocalc...