一、緩存存在的意義:
讓應(yīng)用程序減少對數(shù)據(jù)庫的訪問,提升程序運(yùn)行效率
- MyBatis 中默認(rèn) SqlSession 緩存開啟
- 同一個(gè) SqlSession 對象調(diào)用同一個(gè)<select>時(shí),只有第一次訪問數(shù)據(jù)庫,第一次之后把查詢結(jié)果緩存到 SqlSession 緩存區(qū)(內(nèi)存)中
- 緩存的是 statement 對象.(簡單記憶必須是用一個(gè)<select>)
在 myabtis 時(shí)一個(gè)<select>對應(yīng)一個(gè) statement 對象
有效范圍必須是同一個(gè) SqlSession 對象
二适秩、緩存流程
- 步驟一: 先去緩存區(qū)中找是否存在 statement
- 步驟二:返回結(jié)果
- 步驟三:如果沒有緩存 statement 對象,去數(shù)據(jù)庫獲取數(shù)據(jù)
- 步驟四:數(shù)據(jù)庫返回查詢結(jié)果
-
步驟五:把查詢結(jié)果放到對應(yīng)的緩存區(qū)中
三揪阿、SqlSessionFactory 緩存
- 又叫:二級緩存
- 有效范圍:同一個(gè) factory 內(nèi)哪個(gè) SqlSession 都可以獲取
- 什么時(shí)候使用二級緩存:
當(dāng)數(shù)據(jù)頻繁被使用,很少被修改
使用二級緩存步驟
- 在 mapper.xml 中添加
<cache readOnly="true"></cache>
- 如果不寫 readOnly=”true”需要把實(shí)體類序列化
- 當(dāng) SqlSession 對象 close()時(shí)或 commit()時(shí)會(huì)把 SqlSession 緩存
的數(shù)據(jù)刷(flush)到 SqlSessionFactory 緩存區(qū)中