




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3第五章Mybatis緩存-理解緩存概念-掌握緩存的分類和應用場景-掌握Mybatis一級緩存的使用方法-掌握Mybatis二級緩存的使用方法01020304項目需求背景知識項目實現經典問題強化本章小結0102030405E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3項目需求01項目需求01程序員小王:我在思考一個問題,如果多個用戶查詢相同的數據,能否將第一個用戶查詢的結果直接提供給其他用戶呢,以此來提高查詢效率?項目經理老王:這個想法不錯!Mybatis已經考慮到了這點,提供了緩存機制。你可以了解一下它的具體實現方式,因為它可以有效地提高SQL語句查詢效率。程序員小王:Mybatis真的考慮得很全面,我對這個緩存機制非常感興趣,可以在項目中應用它來提高查詢效率。功能描述01資源權限列表:顯示所有資源,并可以對資源進行管理。E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3背景知識02知識導圖02緩存的概念02在系統運行時,由于I/O操作需要頻繁對磁盤進行讀取,會成為系統性能瓶頸的主要原因之一。為減少系統I/O次數,提升系統性能和查詢效率,使用緩存是一種常見的優化方式。需要注意的是,在使用緩存時,我們還需要考慮緩存命中率這一重要指標。如果緩存中已經存在所需數據,即緩存命中,則可以直接從緩存中獲取數據,否則需要再次查詢數據庫或者執行其它操作,即緩存未命中。緩存未命中的原因可能是緩存中不存在所需的數據,或是緩存已經過期。通常來說,緩存命中率越高,則表示使用緩存的收益越高,系統的響應時間也會越短。因此,在使用緩存時,我們需要綜合考慮緩存的命中率和緩存的失效機制,以提高系統性能和用戶體驗。一級緩存02當應用程序多次執行相同查詢條件的SQL語句時,為了避免對數據庫進行重復查詢,MyBatis提供了一級和二級兩種級別的緩存。一級緩存的工作原理:一級緩存是Mybatis的默認級別緩存,其作用域是SqlSession范圍的,即在同一個SqlSession中執行相同的查詢語句時,Mybatis會優先從緩存中查找是否有對應的結果。一級緩存的使用02配置文件中的核心標簽功能如下:
properties標簽:用于加載外部的數據庫配置文件perties。
settings標簽:MyBatis的全局配置項,這里配置了打印SQL語句的日志級別。
typeAliases標簽:用于自定義Java類型與MyBatis中的類型別名的映射關系,這里定義了一個名為user的別名,代表了com.bc.domain.User類型。
environments標簽:用于配置數據源環境,包括事務管理器和數據源。這里定義了一個名為developement的環境,使用的事務管理器類型為JDBC,數據源類型為POOLED(連接池)。
mappers標簽:用于加載映射文件(Mapper.xml)。這里加載了一個名為UserMapper.xml的映射文件。二級緩存02二級緩存的工作原理:一級緩存的作用域是同一個SqlSession,如果多個SqlSession之間需要共享緩存,則需要使用二級緩存。當開啟二級緩存后,Mybatis會使用CachingExecutor裝飾Executor,在進行一級緩存查詢之前,會先在CachingExecutor進行二級緩存的查詢,這樣就可以在多個SqlSession之間共享緩存,提高查詢效率。二級緩存的開啟02MyBatis二級緩存的作用域是namespace級別的,即同一個namespace下的所有操作共享同一個緩存。要開啟二級緩存,需要在SqlMapConfig.xml中設置開啟總開關,同時在具體的mapper.xml中針對每個statement單獨開啟或關閉二級緩存。二級緩存的使用02修改Mybatis的配置文件SqlMapConfig.xml文件,使用二級緩存。<settings><!--打印查詢語句--><settingname="logImpl"value="STDOUT_LOGGING"/><!--開啟二級緩存默認值為true--><settingname="cacheEnabled"value="true"/></settings>二級緩存的禁用02在一個數據變化頻繁的場景中,如果經常需要執行增加、刪除、修改等操作,那么應該禁用二級緩存以避免緩存與數據庫數據不同步的問題,具體可以在statement中通過設置useCache=false來禁用當前的二級緩存,這樣每次發出的SQL語句都會直接查詢數據庫。二級緩存的應用場景02MyBatis的二級緩存通常應用于查詢較為頻繁但更新不頻繁的場景中,例如: 一些基礎數據表的查詢,這些表中的數據往往較少更新。 查詢結果數據量較大的場景,緩存的應用可以減少反復從數據庫讀取數據的時間消耗,以提升查詢效率。 多個查詢語句之間存在重復查詢同一個結果的情況,此時可通過緩存避免反復查詢。 對于相同的查詢語句,多個SqlSession之間進行查詢,使用緩存可以提高查詢效率。需要注意的是,如果數據更新頻繁,即便開啟了二級緩存,也會導致緩存的經常性失效,此時應該考慮關閉二級緩存或者采用其他方案進行緩存。Mybatis緩存的局限性02
MyBatis的緩存是在SqlSession級別上實現的,它可以在一定程度上提高查詢性能,但同時也存在一些局限:緩存更新延遲:當緩存中的數據被修改時,如果沒有及時更新緩存,會導致緩存中的數據與數據庫中的數據不一致,這需要在使用MyBatis時,注意緩存更新的時機和方法。緩存占用內存:緩存會占用一定的內存資源,如果在緩存中存放大量數據,會導致內存占用過高,從而影響應用的性能。因此,需要根據實際情況來決定緩存的使用范圍和生命周期。緩存命中率下降:當應用中的數據量較大時,緩存的命中率可能會下降。因此,需要根據實際情況來選擇合適的緩存策略和緩存參數,例如設置合適的緩存大小和失效時間等。二級緩存無法實時更新:MyBatis的二級緩存是跨SqlSession的,它的更新可能會導致其他SqlSession中的緩存數據不一致。因此需要謹慎使用二級緩存,尤其是在分布式環境下。E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3項目實現03業務場景03業務場景描述:項目經理老王:小王,你對Mybatis的緩存機制掌握得如何了?程序員小王:我已經了解了Mybatis的一級和二級緩存,但還需要更深入地了解一些問題,例如緩存失效處理以及緩存的適用場景。項目經理老王:你的考慮很周到,確實需要在使用緩存時仔細衡量,否則會出現緩存數據與數據庫數據不同步的情況。同時,大面積緩存失效也可能導致數據庫服務器宕機。程序員小王:是的,因此我們需要在使用緩存時謹慎對待,不能簡單地將數據放入緩存中。項目經理老王:很好,你可以在項目中嘗試使用二級緩存來優化用戶資源權限查詢功能。程序員小王:好的。整體項目結構03項目具體包及其作用:graduationdesign-dao子模塊:持久層
graduationdesign-domain子模塊:實體域
graduationdesign-service子模塊:業務層
graduationdesign-utils子模塊:工具類
graduationdesign-web子模塊:控制層創建Mybatis核心配置文件03創建Mybatis的核心配置文件sqlMapConfig.xml
<!--通過properties標簽加載外部properties文件--><propertiesresource="perties"></properties><settings><!--打印查詢語句--><settingname="logImpl"value="STDOUT_LOGGING"/><!--開啟二級緩存--><settingname="cacheEnabled"value="true"/></settings><!--數據源環境--><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><!--加載映射關系--><mappers><!--指定接口所在的包--><packagename="com.lindaifeng.ssm.dao"></package></mappers>3. 利用Spring整合mybatis03按以下步驟實現:1.在spring中加載mybatis的核心配置文件2.為IUserDao開啟二級緩存3.為POJO類實現java.io.serializable接口E6636BC20180234D78A0072836F0BA7012B9B20215E26B50ACD98F3EB1392B551B4EBF38216C3B0222692E0838460BEBE009217A41D02B111BBFC23A765E14D124F449AD6A2784D7348224B76F624F873694ECB77C9D5FC1A8B6E19E00602C88DA962B9CCE3經典問題強化04經典問題強化04Mybatis緩存優缺點是什么?Mybatis的一級緩存是什么?Mybatis
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 股份轉讓合同協議書圖片
- 2025書籍印刷合同模板
- 調解協議書范本買賣合同
- 2025解除勞動合同證明書模板2
- 大工地電纜合同協議書
- 個人超市轉讓合同協議書
- 保密協議書屬于什么合同
- 簡易售貨合同協議書范本
- 2025租賃合同與購房合同有什么區別
- 衛生站轉讓合同協議書
- 護理題庫-基層衛生崗位練兵和技能競賽試題
- 鑄造工藝基礎課件
- 應急通信產業發展研究報告(2023年) -中國信通院
- 2023重慶環衛集團有限公司所屬子企業招聘24人筆試備考題庫及答案解析
- 1例新冠病毒感染患者護理查房
- Cpk 計算標準模板
- 全過程工程咨詢管理服務方案
- 大學生朋輩心理輔導知到章節答案智慧樹2023年浙江大學
- 朝鮮半島社會與文化智慧樹知到答案章節測試2023年上海商學院
- 2023華農c語言試卷
- 2022-2023學年安徽省合肥市廬江縣七年級(下)期中英語試卷(含答案)
評論
0/150
提交評論