版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3第五章Mybatis緩存-理解緩存概念-掌握緩存的分類和應(yīng)用場景-掌握Mybatis一級緩存的使用方法-掌握Mybatis二級緩存的使用方法01020304項(xiàng)目需求背景知識項(xiàng)目實(shí)現(xiàn)經(jīng)典問題強(qiáng)化本章小結(jié)0102030405E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3項(xiàng)目需求01項(xiàng)目需求01程序員小王:我在思考一個問題,如果多個用戶查詢相同的數(shù)據(jù),能否將第一個用戶查詢的結(jié)果直接提供給其他用戶呢,以此來提高查詢效率?項(xiàng)目經(jīng)理老王:這個想法不錯!Mybatis已經(jīng)考慮到了這點(diǎn),提供了緩存機(jī)制。你可以了解一下它的具體實(shí)現(xiàn)方式,因?yàn)樗梢杂行У靥岣逽QL語句查詢效率。程序員小王:Mybatis真的考慮得很全面,我對這個緩存機(jī)制非常感興趣,可以在項(xiàng)目中應(yīng)用它來提高查詢效率。功能描述01資源權(quán)限列表:顯示所有資源,并可以對資源進(jìn)行管理。E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3背景知識02知識導(dǎo)圖02緩存的概念02在系統(tǒng)運(yùn)行時,由于I/O操作需要頻繁對磁盤進(jìn)行讀取,會成為系統(tǒng)性能瓶頸的主要原因之一。為減少系統(tǒng)I/O次數(shù),提升系統(tǒng)性能和查詢效率,使用緩存是一種常見的優(yōu)化方式。需要注意的是,在使用緩存時,我們還需要考慮緩存命中率這一重要指標(biāo)。如果緩存中已經(jīng)存在所需數(shù)據(jù),即緩存命中,則可以直接從緩存中獲取數(shù)據(jù),否則需要再次查詢數(shù)據(jù)庫或者執(zhí)行其它操作,即緩存未命中。緩存未命中的原因可能是緩存中不存在所需的數(shù)據(jù),或是緩存已經(jīng)過期。通常來說,緩存命中率越高,則表示使用緩存的收益越高,系統(tǒng)的響應(yīng)時間也會越短。因此,在使用緩存時,我們需要綜合考慮緩存的命中率和緩存的失效機(jī)制,以提高系統(tǒng)性能和用戶體驗(yàn)。一級緩存02當(dāng)應(yīng)用程序多次執(zhí)行相同查詢條件的SQL語句時,為了避免對數(shù)據(jù)庫進(jìn)行重復(fù)查詢,MyBatis提供了一級和二級兩種級別的緩存。一級緩存的工作原理:一級緩存是Mybatis的默認(rèn)級別緩存,其作用域是SqlSession范圍的,即在同一個SqlSession中執(zhí)行相同的查詢語句時,Mybatis會優(yōu)先從緩存中查找是否有對應(yīng)的結(jié)果。一級緩存的使用02配置文件中的核心標(biāo)簽功能如下:
properties標(biāo)簽:用于加載外部的數(shù)據(jù)庫配置文件perties。
settings標(biāo)簽:MyBatis的全局配置項(xiàng),這里配置了打印SQL語句的日志級別。
typeAliases標(biāo)簽:用于自定義Java類型與MyBatis中的類型別名的映射關(guān)系,這里定義了一個名為user的別名,代表了com.bc.domain.User類型。
environments標(biāo)簽:用于配置數(shù)據(jù)源環(huán)境,包括事務(wù)管理器和數(shù)據(jù)源。這里定義了一個名為developement的環(huán)境,使用的事務(wù)管理器類型為JDBC,數(shù)據(jù)源類型為POOLED(連接池)。
mappers標(biāo)簽:用于加載映射文件(Mapper.xml)。這里加載了一個名為UserMapper.xml的映射文件。二級緩存02二級緩存的工作原理:一級緩存的作用域是同一個SqlSession,如果多個SqlSession之間需要共享緩存,則需要使用二級緩存。當(dāng)開啟二級緩存后,Mybatis會使用CachingExecutor裝飾Executor,在進(jìn)行一級緩存查詢之前,會先在CachingExecutor進(jìn)行二級緩存的查詢,這樣就可以在多個SqlSession之間共享緩存,提高查詢效率。二級緩存的開啟02MyBatis二級緩存的作用域是namespace級別的,即同一個namespace下的所有操作共享同一個緩存。要開啟二級緩存,需要在SqlMapConfig.xml中設(shè)置開啟總開關(guān),同時在具體的mapper.xml中針對每個statement單獨(dú)開啟或關(guān)閉二級緩存。二級緩存的使用02修改Mybatis的配置文件SqlMapConfig.xml文件,使用二級緩存。<settings><!--打印查詢語句--><settingname="logImpl"value="STDOUT_LOGGING"/><!--開啟二級緩存默認(rèn)值為true--><settingname="cacheEnabled"value="true"/></settings>二級緩存的禁用02在一個數(shù)據(jù)變化頻繁的場景中,如果經(jīng)常需要執(zhí)行增加、刪除、修改等操作,那么應(yīng)該禁用二級緩存以避免緩存與數(shù)據(jù)庫數(shù)據(jù)不同步的問題,具體可以在statement中通過設(shè)置useCache=false來禁用當(dāng)前的二級緩存,這樣每次發(fā)出的SQL語句都會直接查詢數(shù)據(jù)庫。二級緩存的應(yīng)用場景02MyBatis的二級緩存通常應(yīng)用于查詢較為頻繁但更新不頻繁的場景中,例如: 一些基礎(chǔ)數(shù)據(jù)表的查詢,這些表中的數(shù)據(jù)往往較少更新。 查詢結(jié)果數(shù)據(jù)量較大的場景,緩存的應(yīng)用可以減少反復(fù)從數(shù)據(jù)庫讀取數(shù)據(jù)的時間消耗,以提升查詢效率。 多個查詢語句之間存在重復(fù)查詢同一個結(jié)果的情況,此時可通過緩存避免反復(fù)查詢。 對于相同的查詢語句,多個SqlSession之間進(jìn)行查詢,使用緩存可以提高查詢效率。需要注意的是,如果數(shù)據(jù)更新頻繁,即便開啟了二級緩存,也會導(dǎo)致緩存的經(jīng)常性失效,此時應(yīng)該考慮關(guān)閉二級緩存或者采用其他方案進(jìn)行緩存。Mybatis緩存的局限性02
MyBatis的緩存是在SqlSession級別上實(shí)現(xiàn)的,它可以在一定程度上提高查詢性能,但同時也存在一些局限:緩存更新延遲:當(dāng)緩存中的數(shù)據(jù)被修改時,如果沒有及時更新緩存,會導(dǎo)致緩存中的數(shù)據(jù)與數(shù)據(jù)庫中的數(shù)據(jù)不一致,這需要在使用MyBatis時,注意緩存更新的時機(jī)和方法。緩存占用內(nèi)存:緩存會占用一定的內(nèi)存資源,如果在緩存中存放大量數(shù)據(jù),會導(dǎo)致內(nèi)存占用過高,從而影響應(yīng)用的性能。因此,需要根據(jù)實(shí)際情況來決定緩存的使用范圍和生命周期。緩存命中率下降:當(dāng)應(yīng)用中的數(shù)據(jù)量較大時,緩存的命中率可能會下降。因此,需要根據(jù)實(shí)際情況來選擇合適的緩存策略和緩存參數(shù),例如設(shè)置合適的緩存大小和失效時間等。二級緩存無法實(shí)時更新:MyBatis的二級緩存是跨SqlSession的,它的更新可能會導(dǎo)致其他SqlSession中的緩存數(shù)據(jù)不一致。因此需要謹(jǐn)慎使用二級緩存,尤其是在分布式環(huán)境下。E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3項(xiàng)目實(shí)現(xiàn)03業(yè)務(wù)場景03業(yè)務(wù)場景描述:項(xiàng)目經(jīng)理老王:小王,你對Mybatis的緩存機(jī)制掌握得如何了?程序員小王:我已經(jīng)了解了Mybatis的一級和二級緩存,但還需要更深入地了解一些問題,例如緩存失效處理以及緩存的適用場景。項(xiàng)目經(jīng)理老王:你的考慮很周到,確實(shí)需要在使用緩存時仔細(xì)衡量,否則會出現(xiàn)緩存數(shù)據(jù)與數(shù)據(jù)庫數(shù)據(jù)不同步的情況。同時,大面積緩存失效也可能導(dǎo)致數(shù)據(jù)庫服務(wù)器宕機(jī)。程序員小王:是的,因此我們需要在使用緩存時謹(jǐn)慎對待,不能簡單地將數(shù)據(jù)放入緩存中。項(xiàng)目經(jīng)理老王:很好,你可以在項(xiàng)目中嘗試使用二級緩存來優(yōu)化用戶資源權(quán)限查詢功能。程序員小王:好的。整體項(xiàng)目結(jié)構(gòu)03項(xiàng)目具體包及其作用:graduationdesign-dao子模塊:持久層
graduationdesign-domain子模塊:實(shí)體域
graduationdesign-service子模塊:業(yè)務(wù)層
graduationdesign-utils子模塊:工具類
graduationdesign-web子模塊:控制層創(chuàng)建Mybatis核心配置文件03創(chuàng)建Mybatis的核心配置文件sqlMapConfig.xml
<!--通過properties標(biāo)簽加載外部properties文件--><propertiesresource="perties"></properties><settings><!--打印查詢語句--><settingname="logImpl"value="STDOUT_LOGGING"/><!--開啟二級緩存--><settingname="cacheEnabled"value="true"/></settings><!--數(shù)據(jù)源環(huán)境--><environmentsdefault="developement"><environmentid="developement"><transactionManagertype="JDBC"></transactionManager><dataSourcetype="POOLED"><propertyname="driver"value="${jdbc.driver}"/><propertyname="url"value="${jdbc.url}"/><propertyname="username"value="${jdbc.username}"/><propertyname="password"value="${jdbc.password}"/></dataSource></environment></environments><!--加載映射關(guān)系--><mappers><!--指定接口所在的包--><packagename="com.lindaifeng.ssm.dao"></package></mappers>3. 利用Spring整合mybatis03按以下步驟實(shí)現(xiàn):1.在spring中加載mybatis的核心配置文件2.為IUserDao開啟二級緩存3.為POJO類實(shí)現(xiàn)java.io.serializable接口E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3經(jīng)典問題強(qiáng)化04經(jīng)典問題強(qiáng)化04Mybatis緩存優(yōu)缺點(diǎn)是什么?Mybatis的一級緩存是什么?Mybatis
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年烏魯木齊貨運(yùn)從業(yè)資格考試模擬考試題目及答案
- 洛陽師范學(xué)院《企業(yè)級網(wǎng)絡(luò)架構(gòu)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年度文化產(chǎn)業(yè)實(shí)習(xí)生勞動合同范本3篇
- 2024年某城市地鐵線路 extension 建設(shè)承包合同
- 軟件測試與驗(yàn)收協(xié)議
- 房屋租賃保證書-礦山開采
- 哈爾濱市建筑工地消防管理
- 河北省滄衡名校聯(lián)盟2025屆高三上學(xué)期11月期中考試數(shù)學(xué)試題(解析版)
- 2024年版電動汽車充電站點(diǎn)施工協(xié)議版B版
- 2024年度電商平臺用戶協(xié)議補(bǔ)充條款3篇
- 2014年吉林省長春市中考模擬數(shù)學(xué)
- 上汽-最詳細(xì)的整車開發(fā)流程(CPMP)
- 論文巖棉用酚醛樹脂體系
- 設(shè)計(jì)開發(fā)記錄總表
- 通風(fēng)填寫范例
- 盲人無障礙出行調(diào)查問卷分析報(bào)告(20220215150515)
- 財(cái)務(wù)審批權(quán)限管理辦法
- 許昌特產(chǎn)介紹
- 歐姆龍AD081、DA08C輸入輸出模塊的使用手冊
- 外墻真石漆施工合同書
- 一千個傷心的理由(張學(xué)友)原版五線譜鋼琴譜正譜樂譜.docx
評論
0/150
提交評論