MyBatis學習筆記(三)

mybatis的查詢緩存分爲一級緩存和二級緩存,一級緩存是SqlSession級別的緩存,二級緩存時mapper級別的緩存,二級緩存是多個SqlSession共享的。mybatis經過緩存機制減輕數據壓力,提升數據庫性能。sql

 

一級緩存:數據庫

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

一級緩存的做用域是SqlSession範圍的,當在同一個SqlSession中執行兩次相同的sql語句時,第一次執行完畢會將數據庫中查詢的數據寫到緩存(內存)中,第二次查詢時會從緩存中獲取數據,再也不去底層進行數據庫查詢,從而提升了查詢效率。須要注意的是:若是SqlSession執行了DML操做(insert、update、delete),並執行commit()操做,mybatis則會清空SqlSession中的一級緩存,這樣作的目的是爲了保證緩存數據中存儲的是最新的信息,避免出現髒讀現象。mybatis

當一個SqlSession結束後該SqlSession中的一級緩存也就不存在了,Mybatis默認開啓一級緩存,不須要進行任何配置。app

注意:Mybatis的緩存機制是基於id進行緩存,也就是說Mybatis在使用HashMap緩存數據時,是使用對象的id做爲key,而對象做爲value保存性能

二級緩存:spa

二級緩存是mapper級別的緩存,使用二級緩存時,多個SqlSession使用同一個Mapper的sql語句去操做數據庫,獲得的數據會存在二級緩存區域,它一樣是使用HashMapper進行數據存儲,相比一級緩存SqlSession,二級緩存的範圍更大,多個SqlSession能夠共用二級緩存,二級緩存是跨SqlSession的。xml

二級緩存是多個SqlSession共享的,其做用域是mapper的同一個namespace,不一樣的SqlSession兩次執行相同的namespace下的sql語句,且向sql中傳遞的參數也相同,即最終執行相同的sql語句,則第一次執行完畢會將數據庫中查詢的數據寫到緩存(內存),第二次查詢時會從緩存中獲取數據,再也不去底層數據庫查詢,從而提升查詢效率。對象

Mybatis默認沒有開啓二級緩存,須要在setting全局參數中配置開啓二級緩存。內存

在mybatis-config.xml中配置:

  1. <settings>          
  2.     <setting name="cacheEnabled" value="true"/>  
  3. </settings>  

cacheEnabled的value爲true表示在此配置文件下開啓二級緩存,該屬性默認爲false。

 

在EmployeeMapper.xml中配置:

  1. <!-- 開啓當前mapper的namespace下的二級緩存 -->  
  2. <cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>  

以上配置建立了一個LRU緩存,並每隔60秒刷新,最大存儲512個對象,並且返回的對象被認爲是隻讀。

相關文章
相關標籤/搜索