Mybatis學習(13)查詢快取之一級快取

2021-09-10 02:29:05 字數 1553 閱讀 2721

設定快取的目的就是為了提高查詢訪問速度。mybatis根據緩衝區的作用域劃分為兩種:一級查詢快取和二級查詢快取

基於perpetualcache 的 hashmap本地快取,其儲存作用域為session,當session flushclose之後,該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 語句從資料庫中查詢資...