需要实现CacheController接口并通过一系列的配置委托iBATIS使用EHCache进行缓存.
package com.ibatis.sqlmap.engine.cache.EhCacheController;import java.net.URL;import java.util.Properties;import net.sf.ehcache.Cache;import net.sf.ehcache.CacheManager;import net.sf.ehcache.Element;import com.ibatis.sqlmap.engine.cache.CacheController;import com.ibatis.sqlmap.engine.cache.CacheModel;/** * EhCache Implementation of the {@link com.ibatis.sqlmap.engine.cache.CacheController} interface to be able to use * EhCache as a cache implementation in iBatis. You can configure your cache model as follows, by example, in your * sqlMapping files: * <cacheModel id="myCache" type="nl.rabobank.springproject.ibatis.EhCacheController" readOnly="true" serialize="false"> * <property name="configFile" value="/path-to-ehcache.xml"/> * </cacheModel> * Alternatively, you can use a type alias in your type attribute and defining the class with a * <TypeAlias> declaration, see iBatis documentation on how to do this. */public class EhCacheController implements CacheController { /** The EhCache CacheManager. */ private CacheManager cacheManager; /** * Flush a cache model. * @param cacheModel - the model to flush. */ public void flush(CacheModel cacheModel) { getCache(cacheModel).removeAll(); } /** * Get an object from a cache model. * @param cacheModel - the model. * @param key - the key to the object. * @return the object if in the cache, or null(?). */ public Object getObject(CacheModel cacheModel, Object key) { Object result = null; Element element = getCache(cacheModel).get(key); if (element != null) { result = element.getObjectValue(); } return result; } /** * Put an object into a cache model. * @param cacheModel - the model to add the object to. * @param key - the key to the object. * @param object - the object to add. */ public void putObject(CacheModel cacheModel, Object key, Object object) { getCache(cacheModel).put(new Element(key, object)); } /** * Remove an object from a cache model. * @param cacheModel - the model to remove the object from. * @param key - the key to the object. * @return the removed object(?). */ public Object removeObject(CacheModel cacheModel, Object key) { Object result = this.getObject(cacheModel, key); getCache(cacheModel).remove(key); return result; } /** * Configure a cache controller. Initialize the EH Cache Manager as a singleton. * @param props - the properties object continaing configuration information. */ public void setProperties(Properties props) { URL url = getClass().getResource(props.getProperty("configFile")); cacheManager = CacheManager.create(url); } /** * Gets an EH Cache based on an iBatis cache Model. * @param cacheModel - the cache model. * @return the EH Cache. */ private Cache getCache(CacheModel cacheModel) { String cacheName = cacheModel.getId(); Cache cache = cacheManager.getCache(cacheName); return cache; } /** * Shut down the EH Cache CacheManager. */ public void finalize() { if (cacheManager != null) { cacheManager.shutdown(); } }}
接下来一个sql Mapping config的例子
...property mappings go here...
一个eh-cache.xml配置示例
...put your default cache here...
需要留意的是:
1. 2.你可以在sqlMap.xml中添加多个 3.必须设置sqlMapConfig.xml中
联系客服