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