問(wèn)題: Mybatis的一級(jí)緩存和二級(jí)緩存?
1)一級(jí)緩存 Mybatis的一級(jí)緩存是指SQLSession,一級(jí)緩存的作用域是SQlSession, Mabits默認(rèn)開(kāi)啟一級(jí)緩存。 在同一個(gè)SqlSession中,執(zhí)行相同的SQL查詢時(shí);第一次會(huì)去查詢數(shù)據(jù)庫(kù),并寫在緩存中,第二次會(huì)直接從緩存中取。 當(dāng)執(zhí)行SQL時(shí)候兩次查詢中間發(fā)生了增刪改的操作,則SQLSession的緩存會(huì)被清空。 每次查詢會(huì)先去緩存中找,如果找不到,再去數(shù)據(jù)庫(kù)查詢,然后把結(jié)果寫到緩存中。 Mybatis的內(nèi)部緩存使用一個(gè)HashMap,key為hashcode+statementId+sql語(yǔ)句。Value為查詢出來(lái)的結(jié)果集映射成的java對(duì)象。 SqlSession執(zhí)行insert、update、delete等操作commit后會(huì)清空該SQLSession緩存。
2)二級(jí)緩存 二級(jí)緩存是mapper級(jí)別的,Mybatis默認(rèn)是沒(méi)有開(kāi)啟二級(jí)緩存的。 第一次調(diào)用mapper下的SQL去查詢用戶的信息,查詢到的信息會(huì)存放代該mapper對(duì)應(yīng)的二級(jí)緩存區(qū)域。 第二次調(diào)用namespace下的mapper映射文件中,相同的sql去查詢用戶信息,會(huì)去對(duì)應(yīng)的二級(jí)緩存內(nèi)取結(jié)果。 如果調(diào)用相同namespace下的mapepr映射文件中增刪改sql,并執(zhí)行了commit操作,此時(shí)會(huì)情況該
更多建議: