Mybatis二級(jí)緩存

1.緩存介紹

?Mybatis提供查詢緩存,如果緩存中有數(shù)據(jù)就不用從數(shù)據(jù)庫中獲取睛藻,用于減輕數(shù)據(jù)壓力三幻,提高系統(tǒng)性能。

?Mybatis的查詢緩存總共有兩級(jí)矿微,我們稱之為一級(jí)緩存和二級(jí)緩存痕慢,如圖:?


一級(jí)緩存是SqlSession級(jí)別的緩存。在操作數(shù)據(jù)庫時(shí)需要構(gòu)造 sqlSession對(duì)象涌矢,在對(duì)象中有一個(gè)數(shù)據(jù)結(jié)構(gòu)(HashMap)用于存儲(chǔ)緩存數(shù)據(jù)掖举。不同的sqlSession之間的緩存數(shù)據(jù)區(qū)域(HashMap)是互相不影響的。

二級(jí)緩存是Mapper(namespace)級(jí)別的緩存娜庇。多個(gè)SqlSession去操作同一個(gè)Mapper的sql語句塔次,多個(gè)SqlSession可以共用二級(jí)緩存,二級(jí)緩存是跨SqlSession的名秀。

2.一級(jí)緩存

? ? (1)?Mybatis默認(rèn)開啟了一級(jí)緩存

? ? (2)原理圖

? ??

第一次發(fā)起查詢用戶id為1的用戶信息励负,先去找緩存中是否有id為1的用戶信息,如果沒有匕得,從數(shù)據(jù)庫查詢用戶信息继榆,將查詢到的用戶信息存儲(chǔ)到一級(jí)緩存中。

如果中間sqlSession去執(zhí)行commit操作(執(zhí)行插入耗跛、更新裕照、刪除),清空SqlSession中的一級(jí)緩存调塌,這樣做的目的為了讓緩存中存儲(chǔ)的是最新的信息偶芍,避免臟讀筑公。

第二次發(fā)起查詢用戶id為1的用戶信息偿警,先去找緩存中是否有id為1的用戶信息,緩存中有偶妖,直接從緩存中獲取用戶信息。

3.二級(jí)緩存

? ? (1) 二級(jí)緩存是namespace級(jí)別的,默認(rèn)不開啟

? ? (2) 開啟步驟

? ? ? ? 1)?<settings>

? ? ? ? <setting?"cacheEnabled"value="true"/>

????????</settings>

? ? ? ? 2) 在mapper.xml中 加入標(biāo)簽 <cache/> 核心參數(shù)可不設(shè)置 使用默認(rèn)參數(shù)

? ??????<!--開啟本mapper下的namespace的二級(jí)緩存政溃,默認(rèn)使用的是mybatis提供的PerpetualCache -->

? ? (3) 原理圖


? ??
第一次調(diào)用mapper下的SQL去查詢用戶信息趾访。查詢到的信息會(huì)存到該mapper對(duì)應(yīng)的二級(jí)緩存區(qū)域內(nèi)。

第二次調(diào)用相同namespace下的mapper映射文件中相同的SQL去查詢用戶信息董虱。會(huì)去對(duì)應(yīng)的二級(jí)緩存內(nèi)取結(jié)果扼鞋。

如果調(diào)用相同namespace下的mapper映射文件中的增刪改SQL,并執(zhí)行了commit操作愤诱。此時(shí)會(huì)清空該namespace下的二級(jí)緩存云头。

禁用二級(jí)緩存

默認(rèn)二級(jí)緩存的粒度是Mapper級(jí)別的,但是如果在同一個(gè)Mapper文件中某個(gè)查詢不想使用二級(jí)緩存的話淫半,就需要對(duì)緩存的控制粒度更細(xì)溃槐。

在select標(biāo)簽中設(shè)置useCache=false,可以禁用當(dāng)前select語句的二級(jí)緩存科吭,即每次查詢都是去數(shù)據(jù)庫中查詢昏滴,默認(rèn)情況下是true,即該statement使用二級(jí)緩存对人。


<selectid="findUserById"parameterType="int"

?????????????????? resultType="com.kkb.mybatis.po.User"useCache="true">

???????? SELECT * FROM user WHERE id = #{id}

</select>


刷新二級(jí)緩存

通過flushCache屬性谣殊,可以控制select、insert规伐、update蟹倾、delete標(biāo)簽是否屬性二級(jí)緩存

默認(rèn)設(shè)置

?????? *默認(rèn)情況下如果是select語句,那么flushCache是false猖闪。

?????? *如果是insert、update肌厨、delete語句培慌,那么flushCache是true。

默認(rèn)配置解讀

?????? *如果查詢語句設(shè)置成true柑爸,那么每次查詢都是去數(shù)據(jù)庫查詢吵护,即意味著該查詢的二級(jí)緩存失效。

?????? *如果增刪改語句設(shè)置成false表鳍,即使用二級(jí)緩存馅而,那么如果在數(shù)據(jù)庫中修改了數(shù)據(jù),而緩存數(shù)據(jù)還是原來的譬圣,這個(gè)時(shí)候就會(huì)出現(xiàn)臟讀瓮恭。

flushCache設(shè)置如下:

<selectid="findUserById"parameterType="int"

?????????????????? resultType="com.kkb.mybatis.po.User"useCache="true"flushCache="true">

?????????????????? SELECT * FROM user WHERE id =#{id}

</select>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市厘熟,隨后出現(xiàn)的幾起案子屯蹦,更是在濱河造成了極大的恐慌维哈,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件登澜,死亡現(xiàn)場(chǎng)離奇詭異阔挠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)脑蠕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門购撼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谴仙,你說我怎么就攤上這事迂求。” “怎么了狞甚?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵锁摔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我哼审,道長(zhǎng)谐腰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任涩盾,我火速辦了婚禮十气,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘春霍。我一直安慰自己砸西,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布址儒。 她就那樣靜靜地躺著芹枷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪莲趣。 梳的紋絲不亂的頭發(fā)上鸳慈,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音喧伞,去河邊找鬼走芋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛潘鲫,可吹牛的內(nèi)容都是我干的翁逞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼溉仑,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼挖函!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起彼念,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤挪圾,失蹤者是張志新(化名)和其女友劉穎浅萧,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哲思,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洼畅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棚赔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帝簇。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖靠益,靈堂內(nèi)的尸體忽然破棺而出丧肴,到底是詐尸還是另有隱情,我是刑警寧澤胧后,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布芋浮,位于F島的核電站,受9級(jí)特大地震影響壳快,放射性物質(zhì)發(fā)生泄漏纸巷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一眶痰、第九天 我趴在偏房一處隱蔽的房頂上張望瘤旨。 院中可真熱鬧,春花似錦竖伯、人聲如沸存哲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祟偷。三九已至,卻和暖如春打厘,著一層夾襖步出監(jiān)牢的瞬間肩袍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工婚惫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人魂爪。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓先舷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親滓侍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒋川,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容