mybatis缓存机制
文章目錄
- 緩存介紹
- 一級緩存
- 二級緩存
- 二級緩存使用步驟
- 二級緩存和一級緩存的區(qū)別:
緩存介紹
緩存主要是對查詢起作用,減輕數(shù)據(jù)庫的壓力,提高數(shù)據(jù)庫的性能
mybatis中提供了一級緩存、二級緩存
一級緩存是SQLSession級別的緩存,同一個SQLSession上的查詢可以使用一級緩存,不同的SQLSession緩存是相互獨立的,互不影響
二級緩存是mapper級別的緩存,多個SQLSession會命中二級緩存,及二級緩存可以在多個SQLSession之間共享
一級緩存
一級緩存是SQLSession級別緩存,一級緩存的作用域是一個SQLSession,在同一個sqlsession下兩次執(zhí)行相同的SQL查詢操作,第一次執(zhí)行完畢后會將數(shù)據(jù)庫中查詢的數(shù)據(jù)寫入緩存,第二次會從緩存中獲取數(shù)據(jù)則不從數(shù)據(jù)庫中獲取,提高查詢效率,當SQLSession結束,緩存也就隨之失效
mybatis是默認開啟一級緩存
注意:緩存起作用是對同一個數(shù)據(jù)而言,必須是連續(xù)的查詢操作,第一次操作之后緩存會起作用,在第一次查詢之后對同一個數(shù)據(jù)做變更/刪除操作,緩存會被清空,后續(xù)查詢中的第一個查詢是需要到數(shù)據(jù)庫查詢
一級緩存測試:
mybatis默認支持的,不需要配置
同一個session下連續(xù)查詢操作:
二級緩存
mybatis的二級緩存是mapper級別的緩存,默認是關閉的
對同一個mapper其不同的SQLSession可以共享二級緩存,不同的mapper是相互獨立的
二級緩存的使用需要打開二級緩存配置,映射的java對象實現(xiàn)序列化
二級緩存使用步驟
1、在mybatis的全局配置文件中打開二級緩存的開關
<settings><!--二級緩存的配置信息--><setting name="cacheEnabled " value="true"/></settings>2、將映射的對象實現(xiàn)序列化
public class Student implements Serializable3、在mapper中使用cache標簽
<!--cache標簽flushInterval(刷新時間) 是正整數(shù),單位是毫秒,默認不設置,即沒有刷新時間size(引用數(shù)據(jù)) 正整數(shù),默認1024,記錄是緩存的對象的數(shù)目readOnly(只讀) eviction:給定緩存回收策略LRU:最近最少使用的,移除長時間不使用緩存對象FIFO:先進先出,按照對象進入緩存的順序來移除對象soft:軟引用:移除基于垃圾回收狀態(tài)和軟引用規(guī)則的對象weak:弱引用:移除弱引用所作用的對象--><cache flushInterval="60000" size="512" readOnly="true" eviction="LRU"/>二級緩存的測試:
useCache:配置禁用緩存
在Statement上設置useCache="false"禁用select查詢的二級緩存,即每次查詢都會去數(shù)據(jù)庫,不使用二級緩存
二級緩存和一級緩存的區(qū)別:
二級緩存的范圍更大,多個SQLSession可以共享一個mapper中的二級緩存,
每一個mapper都有一個二級緩存,如果mapper的namespace如果相同,這兩個mapper執(zhí)行查詢SQL查詢到的數(shù)據(jù)將存在相同的二級緩存區(qū)域中
一級緩存,二級緩存 SQLSession->defaultSqlSession ->CachingExecutor
一級緩存:LocalCache
二級緩存:tcm
執(zhí)行優(yōu)先級源碼
總結
以上是生活随笔為你收集整理的mybatis缓存机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis动态代理
- 下一篇: 485有时候从机接收指令没反应_原创案例