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