MyBatis的一級緩存:什么是它,為什么要使用?
一級緩存是MyBatis中非常有用的一個特性,它可以提高數據庫的查詢性能。在操作數據庫時,我們需要構造SqlSession對象,并在其中使用一個內存區域(HashMap)用于存儲緩存數據。當我們執行查
一級緩存是MyBatis中非常有用的一個特性,它可以提高數據庫的查詢性能。在操作數據庫時,我們需要構造SqlSession對象,并在其中使用一個內存區域(HashMap)用于存儲緩存數據。當我們執行查詢語句時,會將查詢結果緩存到這個map中。如果下次再查詢時,會先判斷之前是否有完全相同的查詢,如果有,則直接從緩存中讀取,這就是一級緩存的作用。
需要注意的是,如果在第一次查詢后,對數據進行了增刪改,則該map緩存就會被清空,避免下次查詢時出現臟讀(即數據被改變,但你從緩存中讀取的數據不對)。
舉個例子來演示一下,首先我們查詢id為1的用戶,然后再一次讀取,看看是否使用到了一級緩存:
首先我們進入debug來執行第一個查詢,可以看到控制臺的日志中顯示了查詢語句,表明這次是查詢數據庫來得到數據并將其存入緩存中。
然后看看第二次查詢相同的數據,可以看到沒有再出現查詢語句,但是得到的數據是正確的,表明這次數據是從一級緩存中取的。這樣就可以不用頻繁地訪問數據庫了。
但是,如果在第一個查詢后,修改了數據(此時會清空緩存),那么第二次查詢就需要再次訪問數據庫了,下圖兩個查詢sql都出現了,可以看出調用了兩次數據庫:
實際上,我們可以發現,SqlSession這個會話非常重要,如果會話關閉了(緩存被清空了),那就什么都沒了。同樣的,如果我們開啟了兩個會話:會話1、會話2,會話1剛查詢完數據,會話2剛好對這個數據進行修改(此時數據庫的數據),那么會話1再查詢的時候是從自己會話對象的緩存中取的數據,這時的數據就和數據庫的數據不同了(剛才會話2修改過)。
因此,當使用一級緩存時,需要確保在同一個SqlSession中使用。否則,使用的就不是一級緩存了。如果要跨SqlSession使用,則需要使用二級緩存(下次介紹),這點需要注意。
以上就是關于MyBatis的一級緩存的介紹和使用方法。如果本文對您有幫助,請為我們的文章點贊投票。我們的文章均基于平時在項目中遇到的問題積累和總結而來,謝謝閱讀。