Mybatis學習(一)mybatis查詢緩存理解

查詢緩存html

一級緩存是SqlSession級別的緩存。在操做數據庫時須要構造 sqlSession對象,在對象中有一個數據結構(HashMap)用於存儲緩存數據。不一樣的sqlSession之間的緩存數據區域(HashMap)是互相不影響的。mysql

二級緩存是mapper級別的緩存,多個SqlSession去操做同一個Mapper的sql語句,多個SqlSession能夠共用二級緩存,二級緩存是跨SqlSession的。算法

工做原理sql

一級緩存數據庫

 

                 一級緩存工做原理圖緩存

第一次發起查詢用戶id爲1的用戶信息,先去找緩存中是否有1的用戶,若是有的話拿去用,若是沒有去數據庫中查去。獲得用戶信息放入一級緩存中去。若是SqlSession去執行commit操做(執行插入、刪除、更新)的話,清空SqlSession中的一級緩存,這樣作就是爲了讓緩存中的數據保持最新,避免用戶讀到錯誤的數據。數據結構

二級緩存mybatis

                    二級緩存工做原理圖app

首先得開啓二級緩存,sqlSession1去查詢用戶id爲1的用戶信息,查詢到用戶信息會將查詢數據存儲到二級緩存中。若是SqlSession3去執行相同 mapper下sql,執行commit提交,清空該 mapper下的二級緩存區域的數據。sqlSession2去查詢用戶id爲1的用戶信息,去緩存中找是否存在數據,若是存在直接從緩存中取出數據。spa

一級緩存和二級緩存的區別

 

二級緩存的範圍更大,多個sqlSession能夠共享一個UserMapper的二級緩存區域。UserMapper有一個二級緩存區域(按namespace分) ,其它mapper也有本身的二級緩存區域(按namespace分)。每個namespace的mapper都有一個二緩存區域,兩個mapper的namespace若是相同,這兩個mapper執行sql查詢到數據將存在相同 的二級緩存區域中。

開啓二級緩存

mybaits的二級緩存是mapper範圍級別,除了在Configuration.xml設置二級緩存的總開關,還要在具體的mapper.xml中開啓二級緩存。

 

[html]  view plain  copy
 
  1. <span style="white-space:pre">    </span><setting name="cacheEnabled" value="true">  
  2. <span style="white-space:pre">    </span></setting>  

在mapper.xml中開啓緩存

 

 

[html]  view plain  copy
 
  1. <span style="white-space:pre">    </span><mapper namespace="cn.bj.mybatis.models.userMapper">  
  2. <span style="white-space:pre">        </span><cache/>  
  3. <span style="white-space:pre">    </span></mapper>  

在配置文件中,具體的select配置中屬性 useCache=false禁用二級緩存。即針對當前的sql語句每次都要求是數據庫最新的內容

相關文章
相關標籤/搜索