1. 什么是一級(jí)緩存?
一級(jí)緩存是 MyBatis 默認(rèn)開(kāi)啟的緩存機(jī)制。它位于 SqlSession 的內(nèi)部,用于緩存查詢結(jié)果。當(dāng)我們執(zhí)行相同的 SQL 語(yǔ)句時(shí),MyBatis 會(huì)先查找一級(jí)緩存,如果緩存中存在對(duì)應(yīng)的結(jié)果,則直接返回,而不再訪問(wèn)數(shù)據(jù)庫(kù)。
2. 一級(jí)緩存的生命周期
一級(jí)緩存的生命周期與 SqlSession 相關(guān)聯(lián)。當(dāng)我們創(chuàng)建一個(gè) SqlSession 對(duì)象時(shí),一級(jí)緩存被創(chuàng)建;當(dāng)我們關(guān)閉 SqlSession 對(duì)象時(shí),一級(jí)緩存被清空。這意味著一級(jí)緩存只在一個(gè) SqlSession 的范圍內(nèi)有效。
3. 一級(jí)緩存的特性
一級(jí)緩存具有以下特性:
默認(rèn)開(kāi)啟,無(wú)需配置
基于對(duì)象引用,存儲(chǔ)在內(nèi)存中
對(duì)于相同的查詢語(yǔ)句,結(jié)果會(huì)被緩存下來(lái)
一級(jí)緩存是事務(wù)性的,只在事務(wù)提交或回滾后才會(huì)生效
4. 一級(jí)緩存的使用場(chǎng)景
一級(jí)緩存適用于以下場(chǎng)景:
頻繁讀取相同數(shù)據(jù)
數(shù)據(jù)不經(jīng)常更新
查詢結(jié)果數(shù)量不大
5. 一級(jí)緩存的失效情況
一級(jí)緩存會(huì)在以下情況下失效:
執(zhí)行了增刪改操作,可能會(huì)改變緩存中的數(shù)據(jù)
手動(dòng)清空緩存,通過(guò)調(diào)用 SqlSession 的 clearCache 方法
SqlSession 被關(guān)閉,導(dǎo)致緩存被清空
6. 控制一級(jí)緩存的行為
MyBatis 提供了一些配置選項(xiàng),可以控制一級(jí)緩存的行為:
設(shè)置緩存級(jí)別為 STATEMENT,每次查詢都會(huì)刷新緩存
關(guān)閉緩存,通過(guò)在 <select>、<insert>、<update>、<delete> 標(biāo)簽上添加 flushCache="true" 屬性
手動(dòng)清空緩存,通過(guò)調(diào)用 SqlSession 的 clearCache 方法
7. 總結(jié)
MyBatis 的一級(jí)緩存是一種輕量級(jí)的緩存機(jī)制,能夠顯著提升查詢性能。它的生命周期與 SqlSession 相關(guān)聯(lián),具有一定的使用場(chǎng)景和失效情況。通過(guò)合理配置,我們可以控制一級(jí)緩存的行為,以適應(yīng)不同的業(yè)務(wù)需求。