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
調