什么是緩存?
在講解MyBatis的緩存機(jī)制之前,我們先來了解什么是緩存。
緩存就是將我們經(jīng)常查詢的數(shù)據(jù)的結(jié)果保存到一個(gè)內(nèi)存中(緩存就是內(nèi)存中的一個(gè)對象),那么在下一次查詢的時(shí)候就不用到數(shù)據(jù)庫文件中查詢,而是從內(nèi)存中獲取,從而減少與數(shù)據(jù)庫的交付次數(shù)提高了響應(yīng)速度。
假如有一條數(shù)據(jù)的查詢量非常大,且內(nèi)容基本不變,反復(fù)查詢就會(huì)讓數(shù)據(jù)庫壓力變大,這時(shí)我們就可以將數(shù)據(jù)存在內(nèi)存緩存中,這樣就大大提高的了查詢效率,同時(shí)緩解了數(shù)據(jù)庫壓力。
MyBatis的緩存機(jī)制MyBatis提供了一級緩存和二級緩存
一級緩存:也稱為本地緩存,用于保存用戶在一次會(huì)話過程中查詢的結(jié)果,用戶一次會(huì)話中只能使用一個(gè)sqlSession,一級緩存是默認(rèn)開啟的。在同一個(gè) sqlSession 中兩次執(zhí)行相同的 sql 語句,第一次執(zhí)行完畢會(huì)將數(shù)據(jù)庫中查詢的數(shù)據(jù)寫到緩存(內(nèi)存),第二次會(huì)從緩存中獲取,從而提高查詢效率。當(dāng)一個(gè) sqlSession 結(jié)束后該 sqlSession 中的 一級緩存也就不存在了。
二級緩存:也稱為全局緩存,是mapper級別的緩存,是針對一個(gè)表的查結(jié)果的存儲(chǔ),可以共享給所有針對這張表的查詢的用戶。二級緩存是多個(gè) SqlSession 共享的,其作用域是 mapper 的同一個(gè) namespace,不同的 sqlSession 兩次執(zhí)行相同 namespace 下的 sql 語句且向 sql 中傳遞參數(shù)也相同,即最終執(zhí)行相同的 sql 語句,第一次執(zhí)行完畢會(huì)將數(shù)據(jù)庫中查詢的數(shù)據(jù)寫到緩存(內(nèi)存),第二次會(huì)從緩存中獲取數(shù)據(jù),而不再從數(shù)據(jù)庫查詢,從而提高查詢效率。Mybatis默認(rèn)沒有開啟二級緩存,需要手動(dòng)配置。