二級緩存默認也是基於 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