設定快取的目的就是為了提高查詢訪問速度。mybatis根據緩衝區的作用域劃分為兩種:一級查詢快取和二級查詢快取
基於perpetualcache 的 hashmap本地快取,其儲存作用域為session,當session flush或close之後,該session中的所有 cache 就將清空。也就是當sqlsession結束後,該sqlsession中的一級快取也就不存在了。mybatis預設的一級快取是開啟狀態並且不能關閉。
在這裡使用最簡單的例子只是實現了增刪改查操作。
修改測試類mytest
//根據id號選出學生
@test
public void testselectstudentbyid()
在這裡,查詢了兩次id=24的student。現在來檢視後台的列印結果。
我們看到,控制太出現的結果是:兩次輸出,但是只是執行了一次查詢。說明第二次查詢是從快取中取得的資料。
其實,一級快取其快取的是相同sql對映的id的查詢結果,而不是相同sql語句的查詢結果。因為mybatis內部對於查詢快取,無論是一級快取還是二級快取,其底層都是使用乙個hashmap實現:key是sql的id,value是從資料庫中查詢出的結果。
public inte***ce istudentdao
//根據id號選出學生
@test
public void testselectstudentbyid()
檢視結果:
增刪改操作,無論其是否進行sqlsession.commit(),都會清除一級查詢快取
//根據id號選出學生
從執行結果來看,增刪改操作確實是清除了一級快取。
MyBatis查詢快取
一級快取 同乙個sqlsession物件,mybatis預設開啟一級快取。如果用同樣的sqlsession物件查詢相同的資料,則只會在第一次查詢時向資料庫傳送sql語句,並將查詢結果放入到sqlsession中 作為快取存在 後續再次查詢該同樣的物件時,則直接從快取中查詢該物件即可 即省略了資料庫的...
MyBatis學習 快取
將資料存放在程式記憶體中,極大地提公升了程式讀寫資料的速度 mybatis提供快取,用於減輕資料查詢的壓力,提高效能 sqlsession級別的快取 每個session對應乙個快取 一級快取是sqlsession級別的快取。在運算元據庫時需要構造 sqlsession物件,在物件中有乙個 記憶體區域...
mybatis學習 快取
一級快取 1.首先讓我們來證明一級快取的存在。使用者持久層dao 我們可以發現,雖然在上面的 中我們查詢了兩次,但最後只執行了一次資料庫操作,這就是 mybatis 提供給我們的一級快取在起作用了。因為一級快取的存在,導致第二次查詢 id 為 55 的記錄時,並沒有發出 sql 語句從資料庫中查詢資...