10、mybatis中缓存的使用
對于初學者,如何進行mybatis的學習呢?我總結(jié)了幾點,會慢慢的更新出來。首先大家需要了解mybatis是什么、用mybatis來做什么、為什么要用mybatis、有什么優(yōu)缺點;當知道了為什么的時候就開始了解如何用的問題,如何使用mybatis、有幾種使用方式、各種方式的優(yōu)缺點,在這個階段也會學習mybatis涉及到的一些標簽的用法;當知道了基礎用法之后,就開始接觸一些高級的用法,例如動態(tài)sql的使用、mybatis的緩存使用等;至此,在實戰(zhàn)項目中使用mybatis進行開發(fā)已經(jīng)沒有問題了。
接下來就開始深入的研究一下mybatis這個持久層的框架,在純技術(shù)的方面進行研究,提高自己的能力。首先,大家需要了解一下mybatis的整體技術(shù)架構(gòu)和工作原理;接下來,就開始了解一下mybatis各大核心組件的具體功能及其工作原理。至此,算是對mybatis的原理簡單的了解一下了,由于博主的能力有限,因此對于mybatis的框架技術(shù)研究也就到這里算結(jié)束了。
最后會了解一些其他的東西,例如:mybatis的逆向工程使用、如何開發(fā)一個mybatis插件,在這里會介紹一下mybatis的分頁實現(xiàn)等。
至此,mybatis也算是入門了,出去就可以和別人說,你稍微了解mybatis框架,對其也多少有一點自己的理解和看法了。
目錄
1、mybatis 的緩存機制
2、一級緩存
2、1 工作機制
2、2 失效場景
3、二級緩存
3、1 工作機制
3、2 使用方式
4、與緩存設置有關(guān)的設置和屬性
5、引入第三方緩存服務
這一篇介紹一下當使用mybatis作為持久層框架時,如何使用緩存。根據(jù)不同的需求,可以使用一級緩存、二級緩存、集成第三方緩存服務。接下來詳細介紹一下:
1、mybatis 的緩存機制
在mybaits中,默認情況下,只有一級緩存也就是SqlSession級別的緩存是開啟的,也稱本地緩存;二級緩存需要手動開啟和配置才可使用,二級緩存是基于namespacce級別的緩存,mybatis定義了緩存接口cache,用戶可以通過實現(xiàn)Cache接口定義二級緩存。
2、一級緩存
2、1 工作機制
一級緩存是 SqlSession?級別的緩存,又稱本地緩存,作用范圍是一次會話,與數(shù)據(jù)庫同一次會話期間查詢到的數(shù)據(jù)會放在本地緩存中,以后需要獲取相同的數(shù)據(jù),直接在緩存中獲取。 同一次會話中如果調(diào)用兩次相同的訪問持久層的代碼,那么第二次調(diào)用的代碼會去緩存中獲取數(shù)據(jù),而不是去數(shù)據(jù)庫查詢。
2、2 失效場景
以下情況下,一級緩存會失效
1)sqlSession不同,一級緩存失效;
2)查詢語句不同;
3)兩次查詢之間進行了增刪改操作;
4)主動清空一級緩存,執(zhí)行了 sqlSession.clearCache();
3、二級緩存
3、1 工作機制
二級緩存是全局的、基于namespace級別的緩存,一個namespace對應一個二級緩存,這里的namespace就是sql映射文件中的namespace。
二級緩存使用時,mybatis會先將數(shù)據(jù)放在會話的一級緩存中,當會話關(guān)閉、提交時,一級緩存的數(shù)據(jù)會被保存到二級緩存中,如果會話不提交、不關(guān)閉,那么數(shù)據(jù)不會寫入到二級緩存中。
3、2 使用方式
1)開啟全局緩存,配置 <setting name="cacheEnabled" value="true"></setting>;
2)在sql映射文件mapper.xml中配置使用二級緩存
??<cache eviction="" flushTinterval="" readOnly="" size="" type=""></cache>
具體屬性解釋:
| eviction | 緩存的回收策略 LRU:最近最少使用,移除最長時間內(nèi)不被使用的對象; |
| flushInterval | 緩存刷新間隔,緩存多長時間清空一次,默認不清空,設置一個毫秒值? |
| readOnly | 是否只讀 true:只讀;mybatis認為所有從緩存中獲取數(shù)據(jù)的操作都是只讀操作,不會修 改數(shù)據(jù),會直接將數(shù)據(jù)在緩存中的引用給調(diào)用者,不安全,速度快; false:非只讀;mybatis會利用序列化和反序列化的技術(shù)克隆一份新的數(shù)據(jù)給調(diào) 用者,安全,速度慢;? ? ? |
| size | 緩存存放數(shù)據(jù)大小 |
| type???????? | 指定自定義緩存的全類名,類實現(xiàn)Cache接口org.mybatis.caches.ehcache.EhcacheCache; 涉及到數(shù)據(jù)的bean需要實現(xiàn)序列化接口,因為緩存查詢依賴于 序列化&反序列化 |
4、與緩存設置有關(guān)的設置和屬性
| cacheEnabled | true是開啟,false是關(guān)閉 關(guān)閉的是二級緩存,一級緩存一直開啟 |
| useCache | 每個select標簽都有一個useCache="true" || “false” <select id="getUsers" useCache="true">? ?這里的useCache關(guān)閉或者開啟的是二級緩存,和一級緩存無關(guān) |
| flushCache | 每個增刪改標簽都有flushCache="true" || "false",?當增刪改執(zhí)行之后開啟或者關(guān)閉是否清空緩存,?flushCache="true"時,一級緩存和二級緩存都會清空; select標簽也可以設置flushCache,默認值時false,不清空緩存 |
| sqlSession.clearCache | 只是清除當前會話的一級緩存 |
| localCacheScope | 本地緩存作用域,一級緩存時值為session,當前會話的所有數(shù)據(jù)保存在會話緩存中; 當取值為statement時就沒有數(shù)據(jù)緩存了,設置這個參數(shù)可以禁用掉一級緩存,一般不配置; |
5、引入第三方緩存服務
可以整合的第三方緩存服務又?redis、ehchache等,引入的緩存服務中接口需要實現(xiàn)Cache接口。 整合的步驟: 1)導入第三方緩存包; 2)導入和第三方緩存整合的適配包; 3)mapper.xml中引用自定義緩存? <cache type="第三方實現(xiàn)Cache接口的類"></cache>。 有的時候緩存設置一次之后,其他mapper中也想使用緩存,則可以引用同一緩存,需要在其他mapper.xml中引用: <cache-ref namespace="com.czp.dao.UserMapper.xml"/> 以上就是對mybatis 中緩存的一些介紹。總結(jié)
以上是生活随笔為你收集整理的10、mybatis中缓存的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为 nova 11 SE 手机 10
- 下一篇: 故障超过 8 小时,语雀服务现已全部恢复