細說mybatis一級緩存二級緩存

1.一級緩存

Mybatis對緩存提供支持,但是在沒有配置的默認情況下,它只開啓一級緩存,也就是說一級緩存默認是開啓的,一級緩存只是相對於同一個SqlSession而言。所以在參數和SQL完全一樣的情況下,我們使用同一個SqlSession對象調用一個Mapper方法,往往只執行一次SQL,因爲使用SqlSession第一次查詢後,MyBatis會將其放在緩存中,以後再查詢的時候,如果沒有聲明需要刷新,並且緩存沒有超時的情況下,SqlSession都會取出當前緩存的數據,而不會再次發送SQL到數據庫。
在這裏插入圖片描述

一級緩存週期

1.一級緩存的生命週期有多長?

  • MyBatis在開啓一個數據庫會話時,會創建一個新的SqlSession對象,SqlSession對象中會有一個新的Executor對象。Executor對象中持有一個新的PerpetualCache對象;當會話結束時,SqlSession對象及其內部的Executor對象還有PerpetualCache對象也一併釋放掉。
  • 如果SqlSession調用了commit()方法,則會清空這個SqlSession中的一級緩存,目的是爲了防止髒讀
  • 如果SqlSession調用了close()方法,會釋放掉一級緩存PerpetualCache對象,一級緩存將不可用。
  • 如果SqlSession調
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章