




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3第五章Mybatis緩存-理解緩存概念-掌握緩存的分類和應(yīng)用場(chǎng)景-掌握Mybatis一級(jí)緩存的使用方法-掌握Mybatis二級(jí)緩存的使用方法01020304項(xiàng)目需求背景知識(shí)項(xiàng)目實(shí)現(xiàn)經(jīng)典問題強(qiáng)化本章小結(jié)0102030405E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3項(xiàng)目需求01項(xiàng)目需求01程序員小王:我在思考一個(gè)問題,如果多個(gè)用戶查詢相同的數(shù)據(jù),能否將第一個(gè)用戶查詢的結(jié)果直接提供給其他用戶呢,以此來提高查詢效率?項(xiàng)目經(jīng)理老王:這個(gè)想法不錯(cuò)!Mybatis已經(jīng)考慮到了這點(diǎn),提供了緩存機(jī)制。你可以了解一下它的具體實(shí)現(xiàn)方式,因?yàn)樗梢杂行У靥岣逽QL語句查詢效率。程序員小王:Mybatis真的考慮得很全面,我對(duì)這個(gè)緩存機(jī)制非常感興趣,可以在項(xiàng)目中應(yīng)用它來提高查詢效率。功能描述01資源權(quán)限列表:顯示所有資源,并可以對(duì)資源進(jìn)行管理。E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3背景知識(shí)02知識(shí)導(dǎo)圖02緩存的概念02在系統(tǒng)運(yùn)行時(shí),由于I/O操作需要頻繁對(duì)磁盤進(jìn)行讀取,會(huì)成為系統(tǒng)性能瓶頸的主要原因之一。為減少系統(tǒng)I/O次數(shù),提升系統(tǒng)性能和查詢效率,使用緩存是一種常見的優(yōu)化方式。需要注意的是,在使用緩存時(shí),我們還需要考慮緩存命中率這一重要指標(biāo)。如果緩存中已經(jīng)存在所需數(shù)據(jù),即緩存命中,則可以直接從緩存中獲取數(shù)據(jù),否則需要再次查詢數(shù)據(jù)庫或者執(zhí)行其它操作,即緩存未命中。緩存未命中的原因可能是緩存中不存在所需的數(shù)據(jù),或是緩存已經(jīng)過期。通常來說,緩存命中率越高,則表示使用緩存的收益越高,系統(tǒng)的響應(yīng)時(shí)間也會(huì)越短。因此,在使用緩存時(shí),我們需要綜合考慮緩存的命中率和緩存的失效機(jī)制,以提高系統(tǒng)性能和用戶體驗(yàn)。一級(jí)緩存02當(dāng)應(yīng)用程序多次執(zhí)行相同查詢條件的SQL語句時(shí),為了避免對(duì)數(shù)據(jù)庫進(jìn)行重復(fù)查詢,MyBatis提供了一級(jí)和二級(jí)兩種級(jí)別的緩存。一級(jí)緩存的工作原理:一級(jí)緩存是Mybatis的默認(rèn)級(jí)別緩存,其作用域是SqlSession范圍的,即在同一個(gè)SqlSession中執(zhí)行相同的查詢語句時(shí),Mybatis會(huì)優(yōu)先從緩存中查找是否有對(duì)應(yīng)的結(jié)果。一級(jí)緩存的使用02配置文件中的核心標(biāo)簽功能如下:
properties標(biāo)簽:用于加載外部的數(shù)據(jù)庫配置文件perties。
settings標(biāo)簽:MyBatis的全局配置項(xiàng),這里配置了打印SQL語句的日志級(jí)別。
typeAliases標(biāo)簽:用于自定義Java類型與MyBatis中的類型別名的映射關(guān)系,這里定義了一個(gè)名為user的別名,代表了com.bc.domain.User類型。
environments標(biāo)簽:用于配置數(shù)據(jù)源環(huán)境,包括事務(wù)管理器和數(shù)據(jù)源。這里定義了一個(gè)名為developement的環(huán)境,使用的事務(wù)管理器類型為JDBC,數(shù)據(jù)源類型為POOLED(連接池)。
mappers標(biāo)簽:用于加載映射文件(Mapper.xml)。這里加載了一個(gè)名為UserMapper.xml的映射文件。二級(jí)緩存02二級(jí)緩存的工作原理:一級(jí)緩存的作用域是同一個(gè)SqlSession,如果多個(gè)SqlSession之間需要共享緩存,則需要使用二級(jí)緩存。當(dāng)開啟二級(jí)緩存后,Mybatis會(huì)使用CachingExecutor裝飾Executor,在進(jìn)行一級(jí)緩存查詢之前,會(huì)先在CachingExecutor進(jìn)行二級(jí)緩存的查詢,這樣就可以在多個(gè)SqlSession之間共享緩存,提高查詢效率。二級(jí)緩存的開啟02MyBatis二級(jí)緩存的作用域是namespace級(jí)別的,即同一個(gè)namespace下的所有操作共享同一個(gè)緩存。要開啟二級(jí)緩存,需要在SqlMapConfig.xml中設(shè)置開啟總開關(guān),同時(shí)在具體的mapper.xml中針對(duì)每個(gè)statement單獨(dú)開啟或關(guān)閉二級(jí)緩存。二級(jí)緩存的使用02修改Mybatis的配置文件SqlMapConfig.xml文件,使用二級(jí)緩存。<settings><!--打印查詢語句--><settingname="logImpl"value="STDOUT_LOGGING"/><!--開啟二級(jí)緩存默認(rèn)值為true--><settingname="cacheEnabled"value="true"/></settings>二級(jí)緩存的禁用02在一個(gè)數(shù)據(jù)變化頻繁的場(chǎng)景中,如果經(jīng)常需要執(zhí)行增加、刪除、修改等操作,那么應(yīng)該禁用二級(jí)緩存以避免緩存與數(shù)據(jù)庫數(shù)據(jù)不同步的問題,具體可以在statement中通過設(shè)置useCache=false來禁用當(dāng)前的二級(jí)緩存,這樣每次發(fā)出的SQL語句都會(huì)直接查詢數(shù)據(jù)庫。二級(jí)緩存的應(yīng)用場(chǎng)景02MyBatis的二級(jí)緩存通常應(yīng)用于查詢較為頻繁但更新不頻繁的場(chǎng)景中,例如: 一些基礎(chǔ)數(shù)據(jù)表的查詢,這些表中的數(shù)據(jù)往往較少更新。 查詢結(jié)果數(shù)據(jù)量較大的場(chǎng)景,緩存的應(yīng)用可以減少反復(fù)從數(shù)據(jù)庫讀取數(shù)據(jù)的時(shí)間消耗,以提升查詢效率。 多個(gè)查詢語句之間存在重復(fù)查詢同一個(gè)結(jié)果的情況,此時(shí)可通過緩存避免反復(fù)查詢。 對(duì)于相同的查詢語句,多個(gè)SqlSession之間進(jìn)行查詢,使用緩存可以提高查詢效率。需要注意的是,如果數(shù)據(jù)更新頻繁,即便開啟了二級(jí)緩存,也會(huì)導(dǎo)致緩存的經(jīng)常性失效,此時(shí)應(yīng)該考慮關(guān)閉二級(jí)緩存或者采用其他方案進(jìn)行緩存。Mybatis緩存的局限性02
MyBatis的緩存是在SqlSession級(jí)別上實(shí)現(xiàn)的,它可以在一定程度上提高查詢性能,但同時(shí)也存在一些局限:緩存更新延遲:當(dāng)緩存中的數(shù)據(jù)被修改時(shí),如果沒有及時(shí)更新緩存,會(huì)導(dǎo)致緩存中的數(shù)據(jù)與數(shù)據(jù)庫中的數(shù)據(jù)不一致,這需要在使用MyBatis時(shí),注意緩存更新的時(shí)機(jī)和方法。緩存占用內(nèi)存:緩存會(huì)占用一定的內(nèi)存資源,如果在緩存中存放大量數(shù)據(jù),會(huì)導(dǎo)致內(nèi)存占用過高,從而影響應(yīng)用的性能。因此,需要根據(jù)實(shí)際情況來決定緩存的使用范圍和生命周期。緩存命中率下降:當(dāng)應(yīng)用中的數(shù)據(jù)量較大時(shí),緩存的命中率可能會(huì)下降。因此,需要根據(jù)實(shí)際情況來選擇合適的緩存策略和緩存參數(shù),例如設(shè)置合適的緩存大小和失效時(shí)間等。二級(jí)緩存無法實(shí)時(shí)更新:MyBatis的二級(jí)緩存是跨SqlSession的,它的更新可能會(huì)導(dǎo)致其他SqlSession中的緩存數(shù)據(jù)不一致。因此需要謹(jǐn)慎使用二級(jí)緩存,尤其是在分布式環(huán)境下。E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3項(xiàng)目實(shí)現(xiàn)03業(yè)務(wù)場(chǎng)景03業(yè)務(wù)場(chǎng)景描述:項(xiàng)目經(jīng)理老王:小王,你對(duì)Mybatis的緩存機(jī)制掌握得如何了?程序員小王:我已經(jīng)了解了Mybatis的一級(jí)和二級(jí)緩存,但還需要更深入地了解一些問題,例如緩存失效處理以及緩存的適用場(chǎng)景。項(xiàng)目經(jīng)理老王:你的考慮很周到,確實(shí)需要在使用緩存時(shí)仔細(xì)衡量,否則會(huì)出現(xiàn)緩存數(shù)據(jù)與數(shù)據(jù)庫數(shù)據(jù)不同步的情況。同時(shí),大面積緩存失效也可能導(dǎo)致數(shù)據(jù)庫服務(wù)器宕機(jī)。程序員小王:是的,因此我們需要在使用緩存時(shí)謹(jǐn)慎對(duì)待,不能簡(jiǎn)單地將數(shù)據(jù)放入緩存中。項(xiàng)目經(jīng)理老王:很好,你可以在項(xiàng)目中嘗試使用二級(jí)緩存來優(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"/><!--開啟二級(jí)緩存--><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開啟二級(jí)緩存3.為POJO類實(shí)現(xiàn)java.io.serializable接口E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3經(jīng)典問題強(qiáng)化04經(jīng)典問題強(qiáng)化04Mybatis緩存優(yōu)缺點(diǎn)是什么?Mybatis的一級(jí)緩存是什么?Mybatis
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年醫(yī)院營養(yǎng)科考試題及答案
- 2025年企劃部面試題及答案
- 2025年財(cái)務(wù)筆試題庫及答案
- 2025年考研英語預(yù)測(cè)試題及答案
- 2025年大學(xué)英語考試試題及答案
- 2025年手術(shù)室泌尿組試題及答案
- 2025年口腔助理筆試題庫及答案
- 2025年集美試題及答案5年級(jí)
- 2025年測(cè)繪類招聘考試題及答案
- “法律與生活”教學(xué)中民事法律關(guān)系客體的區(qū)分
- 無人機(jī)學(xué)習(xí)文件-飛行手冊(cè)
- 典范英語教材-1a-課件
- 教科版科學(xué)四年級(jí)下冊(cè)教師用書
- 娛樂主播如何轉(zhuǎn)型做帶貨主播
- 慢性腎病知識(shí)講座課件
- 光催化分解水制氫
- 工程勘察設(shè)計(jì)收費(fèi)標(biāo)準(zhǔn)使用手冊(cè)
- 高速鐵路設(shè)計(jì)規(guī)范(最新版)
- 25種全球最流行的管理工具
- 道德與法治-五年級(jí)(下冊(cè))-《建立良好的公共秩序》教學(xué)課件
- 青島版三年級(jí)數(shù)學(xué)下冊(cè)全套單元測(cè)試卷
評(píng)論
0/150
提交評(píng)論