mybatis緩存的使用及理解

和hibernate同樣,mybatis也有緩存機制
一級緩存是基於 PerpetualCache(mybatis自帶)的 HashMap 本地緩存,做用範圍爲session,因此當session commit或close後,緩存就會被清空

二級緩存默認也是基於 PerpetualCache,可是能夠爲其制定存儲源,好比ehcache  java

一級緩存緩存的是SQL語句,而二級緩存緩存的是結果對象,看以下例子(mybatis的日誌級別設爲debug) sql

List<User> users = sqlSession.selectList("com.my.mapper.UserMapper.getUser", "jack");
System.out.println(users);
 
//sqlSession.commit();①

 
List<User> users2 = sqlSession.selectList("com.my.mapper.UserMapper.getUser", "jack");//②admin
System.out.println(users);

結果是隻發起一次SQL語句,若是咱們把②出的參數jack改成admin,發現仍是隻發起一次SQL語句,可是會設置不一樣參數 緩存

若是把①處去掉註釋,會發現不會有緩存了 session


下面就來啓用二級緩存 mybatis

在配置文件中啓用二級緩存 app

<setting name="cacheEnabled" value="true" />
在須要進行緩存的mapper文件UserMapper.xml中加上
<cache readOnly="true"></cache>
注意這裏的readOnly設爲true,默認是false,表示結果集對象須要被序列化


咱們打開①處註釋,②處仍然使用jack,咱們發現結果只執行了一次SQL語句 google

可是若是把②處改成admin,執行了2次SQL語句,這說明二級緩存是緩存結果集對象的 spa


下面咱們來使用ehcache .net

在classpath下添加ehcache.xml hibernate

在UserMapper.xml中添加:

<!-- <cache readOnly="true" type="org.mybatis.caches.ehcache.LoggingEhcache"/>   -->
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
用上面那個會輸出更加詳細的日誌,下面的不會

須要用到ehcache.jar,下載地址:http://sourceforge.net/projects/ehcache/files/ehcache/ehcache-2.7.0/ehcache-2.7.0-distribution.tar.gz/download

mybatis-ehcache.jar下載地址:http://code.google.com/p/mybatis/downloads/detail?name=mybatis-ehcache-1.0.2-SNAPSHOT-bundle.zip&can=3&q=Product%3DCache

相關文章
相關標籤/搜索