下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、mybatis的緩存機(jī)制(一級(jí)緩存二級(jí)緩存和刷新緩存)和mybatis整合ehcache1查詢緩存1.1什么是查詢緩存mybatis提供查詢緩存,用于減輕數(shù)據(jù)壓力,提高數(shù)據(jù)庫(kù)性能。mybaits提供一級(jí)緩存,和二級(jí)緩存。一級(jí)緩存是SqlSession級(jí)別的緩存。在操作數(shù)據(jù)庫(kù)時(shí)需要構(gòu)造sqlSession對(duì)象,在對(duì)象中有一個(gè)(內(nèi)存區(qū)域)數(shù)據(jù)結(jié)構(gòu)(HashMap)用于存儲(chǔ)緩存數(shù)據(jù)。不同的sqlSession之間的緩存數(shù)據(jù)區(qū)域(HashMap)是互相不影響的。一級(jí)緩存的作用域是同一個(gè)SqlSession,在同一個(gè)sqlSession中兩次執(zhí)行相同的sql語(yǔ)句,第一次執(zhí)行完畢會(huì)將數(shù)據(jù)庫(kù)中查詢的數(shù)據(jù)寫到
2、緩存(內(nèi)存),第二次會(huì)從緩存中獲取數(shù)據(jù)將不再?gòu)臄?shù)據(jù)庫(kù)查詢,從而提高查詢效率。當(dāng)一個(gè)sqlSession結(jié)束后該sqlSession中的一級(jí)緩存也就不存在了。Mybatis默認(rèn)開(kāi)啟一級(jí)緩存。二級(jí)緩存是mapper級(jí)別的緩存,多個(gè)SqlSession去操作同一個(gè)Mapper的sql語(yǔ)句,多個(gè)SqlSession去操作數(shù)據(jù)庫(kù)得到數(shù)據(jù)會(huì)存在二級(jí)緩存區(qū)域,多個(gè)SqlSession可以共用二級(jí)緩存,二級(jí)緩存是跨SqlSession的。二級(jí)緩存是多個(gè)SqlSession共享的,具作用域是mapper的同一個(gè)namespace,不同的sqlSession兩次執(zhí)行相同namespace下的sql語(yǔ)句且向sql中
3、傳遞參數(shù)也相同即最終執(zhí)行相同的sql語(yǔ)句,第一次執(zhí)行完畢會(huì)將數(shù)據(jù)庫(kù)中查詢的數(shù)據(jù)寫到緩存(內(nèi)存),第二次會(huì)從緩存中獲取數(shù)據(jù)將不再?gòu)臄?shù)據(jù)庫(kù)查詢,從而提高查詢效率。Mybatis默認(rèn)沒(méi)有開(kāi)啟二級(jí)緩存需要在setting全局參數(shù)中配置開(kāi)啟二級(jí)緩存。如果緩存中有數(shù)據(jù)就不用從數(shù)據(jù)庫(kù)中獲取,大大提高系統(tǒng)性能。1.2一級(jí)緩存1.2.1一級(jí)緩存工作原理下圖是根據(jù)id查詢用戶的一級(jí)緩存圖解第一次發(fā)起查詢用戶id為1的用戶信息,先去找緩存中是否有id為1的用戶信息,如果沒(méi)有,從數(shù)據(jù)庫(kù)查詢用戶信息。得到用戶信息,將用戶信息存儲(chǔ)到一級(jí)緩存中。如果sqlSession去執(zhí)行commit操作(執(zhí)行插入、更新、刪除),清空S
4、qlSession中的一級(jí)緩存, 這樣做的目的為了讓緩存中存儲(chǔ)的是最新的信息, 避免臟讀。第二次發(fā)起查詢用戶id為1的用戶信息,先去找緩存中是否有id為1的用戶信息,緩存中有,直接從緩存中獲取用戶信息。1.2.2一級(jí)緩存測(cè)試mybatis默認(rèn)支持一級(jí)緩存,不需要在配置文件去配置。按照上邊一級(jí)緩存原理步驟去測(cè)試。TestpublicvoidtestCache1()throwsExceptionSqlSessionsqlSession=sqlSessionFactory.openSession();/創(chuàng)建代理對(duì)象UserMapperuserMapper=sqlSession.getMapper(U
5、serMapper.class);/下邊查詢使用一個(gè)SqlSession第一次發(fā)起請(qǐng)求,查詢id為1的用戶Useruser1=userMapper.findUserByld(l);System.out.println(userl);/如果sqlSession去執(zhí)行commit操作(執(zhí)行插入、更新、刪除),清空SqlSession中的一級(jí)緩存,這樣做的目的為了讓緩存中存儲(chǔ)的是最新的信息,避免臟讀。更新user1的信息user1.setUsername(測(cè)試用戶22);userMapper.updateUser(user1);執(zhí)行commit操作去清空緩存sqlSmit();第二次發(fā)起請(qǐng)求,查詢i
6、d為1的用戶Useruser2=userMapper.findUserById(1);System.out.println(user2);sqlSession.close();1.2.3一級(jí)緩存應(yīng)用正式開(kāi)發(fā),是將mybatis和spring進(jìn)行整合開(kāi)發(fā),事務(wù)控制在service中。一個(gè)service方法中包括很多mapper方法調(diào)用。service開(kāi)始執(zhí)行時(shí),開(kāi)啟事務(wù),創(chuàng)建SqlSession對(duì)象第一次調(diào)用mapper的方法findUserById(1)第二次調(diào)用mapper的方法findUserById(1),從一級(jí)緩存中取數(shù)據(jù)/aop控制只要方法結(jié)束,sqlSession關(guān)閉sqlsess
7、ion關(guān)閉后就銷毀數(shù)據(jù)結(jié)構(gòu),清空緩存Service結(jié)束sqlsession關(guān)閉如果是執(zhí)行兩次service調(diào)用查詢相同的用戶信息,不走一級(jí)緩存,因?yàn)镾ervice方法結(jié)束,sqlSession就關(guān)閉,一級(jí)緩存就清空。1.3二級(jí)緩存1.3.1原理首先開(kāi)啟mybatis的二級(jí)緩存。sqlSessionl去查詢用戶id為1的用戶信息,查詢到用戶信息會(huì)將查詢數(shù)據(jù)存儲(chǔ)到二級(jí)緩存中。如果SqlSession3去執(zhí)行相同mapper下sql,執(zhí)行commit提交, 清空該mapper下的二級(jí)緩存區(qū)域的數(shù)據(jù)。sqlSession2去查詢用戶id為1的用戶信息,去緩存中我是否存在數(shù)據(jù),如果存在直接從緩存中取由數(shù)
8、據(jù)。二級(jí)緩存與一級(jí)緩存區(qū)別,二級(jí)緩存的范圍更大,多個(gè)sqlSession可以共享一個(gè)UserMapper的二級(jí)緩存區(qū)域。數(shù)據(jù)類型仍然為HashMapUserMapper有一個(gè)二級(jí)緩存區(qū)域 (按namespace分,如果namespace相同貝U使用同一個(gè)相同的二級(jí)緩存區(qū)),其它mapper也有自己的二級(jí)緩存區(qū)域(按namespace分)。每個(gè)namespace的mapper都有一個(gè)二緩存區(qū)域,兩個(gè)mapper的namespace如果相同,這兩個(gè)mapper執(zhí)行sql查詢到數(shù)據(jù)將存在相同的二級(jí)緩存區(qū)域中。1.3.2開(kāi)啟二級(jí)緩存mybaits的二級(jí)緩存是mapper范圍級(jí)別,除了在SqlMapConfig.xml設(shè)置二級(jí)緩存的總開(kāi)關(guān),還要在具體的mapper.xml中開(kāi)啟二級(jí)緩存。在核心配置文件SqlMapConfig.xml中加入<settingname=cacheEnabledvalue=true7><!-全局配置參數(shù),需要時(shí)再設(shè)置-><settings><!-開(kāi)啟二級(jí)緩存默認(rèn)值為true->
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 自然資源開(kāi)發(fā)利用規(guī)劃服務(wù)合同
- 高能電池研發(fā)及產(chǎn)業(yè)化投資合同
- 造價(jià)工程師在合同管理中的職責(zé)
- 年度房地產(chǎn)銷售代理服務(wù)合同
- 2025版智慧城市建設(shè)項(xiàng)目投資轉(zhuǎn)借款合同樣本3篇
- 二零二四全新石灰石礦山安全生產(chǎn)培訓(xùn)服務(wù)合同3篇
- 2025年度雞產(chǎn)品品牌授權(quán)與銷售合作合同
- 二零二五年度養(yǎng)老產(chǎn)業(yè)私下股份轉(zhuǎn)讓協(xié)議書合同
- 2025年度電影主題咖啡館包場(chǎng)合作合同
- 2025年度美甲店門面轉(zhuǎn)讓及美容美發(fā)行業(yè)市場(chǎng)拓展合同
- 高中物理競(jìng)賽真題分類匯編 4 光學(xué) (學(xué)生版+解析版50題)
- 西方經(jīng)濟(jì)學(xué)-高鴻業(yè)-筆記
- 幼兒園美術(shù)教育研究策略國(guó)內(nèi)外
- 高中英語(yǔ)選擇性必修一單詞表
- 物業(yè)公司介紹
- 2024屆河南省五市高三第一次聯(lián)考英語(yǔ)試題及答案
- 【永輝超市公司員工招聘問(wèn)題及優(yōu)化(12000字論文)】
- 孕婦學(xué)校品管圈課件
- 《愿望的實(shí)現(xiàn)》交流ppt課件2
- 中國(guó)直銷發(fā)展四個(gè)階段解析
- 2024屆浙江省寧波市鎮(zhèn)海區(qū)鎮(zhèn)海中學(xué)高一物理第一學(xué)期期末質(zhì)量檢測(cè)試題含解析
評(píng)論
0/150
提交評(píng)論