mybatis3 新增ehcache支援

etttttss發表於2013-12-05
為了提高MyBatis的效能,有時候我們需要加入快取支援,目前用的比較多的快取莫過於ehcache快取了,ehcache效能強大,而且位各種應用都提供瞭解決方案,在此我們主要是做查詢快取,提高查詢的效率.

 

在Mybatis的官網上把整合ehcache的文件下載下來看了看,說的太簡單了,對於新手很難理解,而且裡面說的也不是很清楚,經過一番折騰,終於將ehcache加入了.

 

官網上提供了一個MyBatis-ehcache.jar的包用於整合ehcache快取,文件中還說明需要一個ehcache-core.jar的包,除了這兩個包之外有幾個包也是必須的,官方並沒有說明,以下是需要加入的所有和ehcache相關的包:

1.ehcache-core-2.4.4.jar

2.mybatis-ehcache-1.0.0.jar

3.slf4j-api-1.6.1.jar

4.slf4j-log4j12-1.6.2.jar

 

除此之外還有mybatis的jar包,log4j,mysql驅動,這些大家應該都知道.

 

將上述包加入專案之後,新建一個檔名,該檔名必須為ehcache.xml,放在類路徑下面,內容如下

 

Xml程式碼 複製程式碼 收藏程式碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xsi:noNamespaceSchemaLocation="../bin/ehcache.xsd">  
  4.     <!--  
  5.     name:Cache的唯一標識  
  6.     maxElementsInMemory:記憶體中最大快取物件數  
  7.     maxElementsOnDisk:磁碟中最大快取物件數,若是0表示無窮大  
  8.     eternal:Element是否永久有效,一但設定了,timeout將不起作用  
  9.     overflowToDisk:配置此屬性,當記憶體中Element數量達到maxElementsInMemory時,Ehcache將會Element寫到磁碟中  
  10.     timeToIdleSeconds:設定Element在失效前的允許閒置時間。僅當element不是永久有效時使用,可選屬性,預設值是0,也就是可閒置時間無窮大  
  11.     timeToLiveSeconds:設定Element在失效前允許存活時間。最大時間介於建立時間和失效時間之間。僅當element不是永久有效時使用,預設是0.,也就是element存活時間無窮大   
  12.     diskPersistent:是否快取虛擬機器重啟期資料  
  13.     diskExpiryThreadIntervalSeconds:磁碟失效執行緒執行時間間隔,預設是120秒  
  14.     diskSpoolBufferSizeMB:這個引數設定DiskStore(磁碟快取)的快取區大小。預設是30MB。每個Cache都應該有自己的一個緩衝區  
  15.      memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理記憶體。預設策略是LRU(最近最少使用)。你可以設定為FIFO(先進先出)或是LFU(較少使用)
  16. 備註: 持久化到硬碟的路徑由虛擬機器引數"java.io.tmpdir"決定.  例如, 在windows中, 會在此路徑下 C:\Documents and Settings\li\Local Settings\Temp  在linux中, 通常會在: /tmp 下  System.out.println(System.getProperty("java.io.tmpdir"));   
  17.     -->  
  18.     <defaultCache overflowToDisk="true" eternal="false"/>  
  19.     <diskStore path="D:/cache" />  
  20.     <!--  
  21.         <cache name="zzugxy" overflowToDisk="true" eternal="false"  
  22.         timeToIdleSeconds="300" timeToLiveSeconds="600" maxElementsInMemory="1000"  
  23.         maxElementsOnDisk="10" diskPersistent="true" diskExpiryThreadIntervalSeconds="300"  
  24.         diskSpoolBufferSizeMB="100" memoryStoreEvictionPolicy="LRU" />  
  25.     -->  
  26. </ehcache>  

 

該檔案是ehcache的配置檔案,上面的註釋已經說得很清楚了,這裡我用的是預設的配置

至此ehcache已經配置好了,然後只需要在你想要快取的mapper配置檔案裡面加入以下內容,該查詢語句得到的結果將會被快取

 

Xml程式碼 複製程式碼 收藏程式碼
  1. <?xml version="1.0" encoding="UTF-8" ?>   
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  3. <mapper namespace="com.qiuqiu.dao.PersonDao">  
  4.     <!-- 以下兩個<cache>標籤二選一,第一個可以輸出日誌,第二個不輸出日誌 -->  
  5.     <cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>  
  6.     <!-- <cache type="org.mybatis.caches.ehcache.EhcacheCache"/> -->  
  7.       
  8.     <select id="selectUserById" parameterType="int" resultType="org.qiuqiu.vo.Person">  
  9.         select * from person where id=#{id}   
  10.     </select>  
  11. </mapper>  
 

這樣就對這個mapper裡面的各種結果進行了快取.程式中不需要修改任何地方.

 

這個過程不復雜,也沒什麼難度,不過Mybatis的官方說的也太含糊了.附件下面有,需要的各種jar包已經包含

相關文章