一級緩存的介紹
一級緩存的范圍是sqlsession級別,同一個sqlsession執(zhí)行同一個sql查詢(相同的sql和參數(shù)),第一次會去查詢數(shù)據(jù)庫并寫到緩存中,第二次從一級緩存中取。
一級緩存是基于PerpetualCache的HashMap本地緩存,默認開啟一級緩存。
什么時候清除一級緩存如果中間的sqlSession去執(zhí)行提交操作(執(zhí)行插入、更新、刪除),會清除SqlSession中的一級緩存,這樣做的目的是讓緩存存儲最新的信息,避免臟讀。
如果執(zhí)行commit、close、add、delete、update等操作,當前的一級緩存就會被清空;當對SqlSession執(zhí)行更新操作(更新、刪除、插入)后再執(zhí)行commit,不僅自身的一級緩存會被清空(執(zhí)行更新操作的效果),而且二級緩存也會被清空(執(zhí)行commit()的效果)。
一級緩存沒有過期時間,只有一個生命周期當MyBatis打開一個數(shù)據(jù)庫會話時,它會創(chuàng)建一個新的SqlSession對象,它有一個Executor對象,Executor對象持有一個PerpetualCache對象,見下面的代碼。當會話結(jié)束時,SqlSession對象及其內(nèi)部的Executor對象和PerpetualCache對象也被一起釋放。