`
elicer
  • 浏览: 133389 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ehcache 跟 Ibatis 集成

阅读更多
Ehcache Controller class
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();
        }
    }
}



A Sample sqlMap 配置文件

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMap
    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="myNamespace">


  <!-- Use type aliases to avoid typing the full classname every time. -->
  <typeAlias alias="MyPojo" type="nl.myproject.MyPojo"/>
  <typeAlias alias="MapCacheController" type="com.ibatis.sqlmap.engine.cache.EhCacheController"/>

  <cacheModel id="MyPojoCache" type="MapCacheController" readOnly="true" serialize="false">
    <property name="configFile" value="/ehcache.xml"/>
  </cacheModel>

  <resultMap id="ResultQueryMap" class="MyPojo">
    ...property mappings go here...
  </resultMap>

  <select id="getMyPojoList" resultMap="ResultQueryMap" cacheModel="MyPojoCache">
    ...select query to get your pojo from the database goes here...
  </select>

</sqlMap>





A sample ehcache 配置文件


<ehcache>

  ...put your default cache here...

  <cache
    name="myNamespace.MyPojoCache"
    maxElementsInMemory="5"
    eternal="false"
    timeToLiveSeconds="60"
    overflowToDisk="false"
    memoryStoreEvictionPolicy="LRU"/>

</ehcache>




总结:
1.你可以建多个CacheModel 在sqlmap的配置文件中,然后指定到同一个cacheController.
2.记住不要忘了 设置  cacheModelsEnabled=true (在sqlmap的<setting>)否则你的cache就根本不会去作用。

2
0
分享到:
评论
8 楼 elicer 2012-04-19  
tanglingshuai 写道
i swear 刚才的 swear 无效

你只要实现相应的接口就行了,具体起不起作用,那完全看你自己的实现是不是对的。
7 楼 tanglingshuai 2012-04-11  
i swear 刚才的 swear 无效
6 楼 tanglingshuai 2012-04-11  
i swear doesn't work
5 楼 snowolf 2012-03-08  
嗨!如果做一个Memcached的Controller呢?譬如XMemcached的实现?
4 楼 elicer 2009-11-18  
jbas 写道
ibatis不是已经有自己的缓存机制了吗?干吗还来个集成ehcache?

我知道ibatis 有自己的cache,但我写这片文章的目的是为了,展示一个ibatis跟第三方的cache集成的例子。
3 楼 elicer 2009-11-18  
老兄com.ibatis.sqlmap.engine.cache.EhCacheController是我自己写的一个类,ibatis提供了一个CacheController 接口,让你自己来实现跟第三方的cache结成。
2 楼 zhb01 2009-11-18  
com.ibatis.sqlmap.engine.cache.EhCacheController在iBATIS 2.3.4 jar中没有这个类,请问你是怎么配置ehcache的
1 楼 jbas 2009-11-01  
ibatis不是已经有自己的缓存机制了吗?干吗还来个集成ehcache?

相关推荐

    spring+ibatis+ehcache整合例子

    这个"spring+ibatis+ehcache整合例子"是一个完整的示例项目,展示了如何将这三个框架无缝集成到一个基于MySQL数据库的应用中。下面将详细介绍这三个框架及其整合的关键点。 **Spring框架** Spring是一个全面的企业...

    spring.struts,ibatis集成包

    标题中的"spring.struts,ibatis集成包"是指将Spring、Struts和iBATIS这三种技术框架整合在一起的软件包。这种集成旨在提供一个高效、灵活且可扩展的Web应用程序开发环境。Spring作为核心框架,负责管理应用的业务...

    hibernate与ibatis比较的11大优势

    相比之下,iBatis虽然也可以与Spring框架集成,但在集成的深度和广度上不如Hibernate。 9. **与JBoss等容器的兼容性**:由于Hibernate遵循JSR 250规范,因此它能够很好地与其他Java EE容器(如JBoss)进行集成。...

    struts2,hibernate,spring,ibatis面试合集

    4. **ORM集成**:Spring可以很好地整合Hibernate等ORM框架,简化数据库操作。 这三个框架组合使用,可以构建出高效、可维护的Java企业级应用,尤其在北京、杭州等大城市,它们在面试中经常被提及,对于开发者来说,...

    spring+ibtis框架

    3. **iBatis集成** - **SqlSessionFactory**:iBatis的核心是`SqlSessionFactory`,它根据配置文件生成`SqlSession`,用于执行SQL。在Spring中,可以使用`SqlSessionFactoryBean`来创建`SqlSessionFactory`。 - **...

    spring依赖包讲解.doc

    ORM(对象关系映射)集成中,Hibernate相关的jar(ehcache.jar、hibernate2.jar、odmg.jar)用于Spring的Hibernate支持,而iBATIS(ibatis-common.jar、ibatis-sqlmap.jar、ibatis-sqlmap-2.jar)则用于iBATIS集成。...

    springmvc和mybatis集成全部jar包(全)

    springmvc4.3.3和mybatis3.4.1集成最新全部jar包,还包含了其他一些常用的jar包,很全,已经在项目中验证过。 lib/antlr-2.7.2.jar lib/aopalliance-1.0.jar lib/asm-3.3.1.jar lib/aspectjweaver-1.6.5.jar ...

    spring框架各jar包详解

    使用 Spring 的 iBATIS 集成类时,这些文件不可或缺;如果使用 JDBC 或其它 ORM 工具如 Hibernate 或 JDO,则你的应用不需要这些文件。 itextitext-1.02b.jar Spring 使用 iText 提供 web 层的 PDF 支持。只有你的...

    Spring3.0xMVC jar包关系

    - **说明**:使用Spring的iBATIS集成类时,这些文件不可或缺。如果你使用JDBC或其他ORM工具,例如Hibernate或JDO,则无需包含这些文件。 13. **iText** - **JAR文件**:itext-1.02b.jar - **说明**:Spring使用...

    MyBatis整合第三方缓存.zip

    4. **自定义缓存实现**:创建一个实现`org.apache.ibatis.cache.Cache`接口的类,该类将负责与Redis的交互,包括读写操作。 5. **配置自定义缓存**:在`mybatis-config.xml`中注册自定义的Redis缓存实现,通过`...

    Spring包的依赖关系

    - **说明**: 使用Spring的iBATIS集成类时,需要这些文件;若使用JDBC或其他ORM工具如Hibernate或JDO,则无需包含它们。 ### 13. iText - **JAR文件**: itext-1.02b.jar - **说明**: Spring通过iText提供web层的PDF...

    spring-modules-0.8.zip

    4. **数据访问集成**:Spring 模块提供了对多种数据访问技术的集成,包括JDBC、Hibernate、iBatis等ORM框架,以及JPA规范。这些集成使得开发者可以方便地在Spring应用中使用这些技术,进行数据库操作,同时利用...

    系统信息

    3. **Ehcache与Spring注解配置**:Ehcache是一个流行的Java缓存框架,通过Spring注解配置,可以在Spring应用中轻松集成和管理缓存,提高应用程序性能。注解方式使得配置更加简洁,减少了XML配置文件的复杂性。 4. *...

    高级Java工程师求职简历模板.doc

    如Tomcat(Web服务器),JSP(Java Server Pages),Struts1,Spring,Hibernate,iBatis,Lucene(全文搜索引擎),Velocity(模板引擎),Ajax(异步JavaScript和XML),Ehcache(缓存系统),以及URLRewrite(URL...

    基于SSHI架构的开发平台技术方案

    7. **基于EHCache的缓存管理机制**:通过高效的缓存策略,显著提升了系统的响应速度与性能。 8. **基于Quartz的任务调度管理**:支持定时任务的执行,增强了系统的自动化能力。 9. **基于Log4j的日志管理**:通过...

    org.springframework.orm.jar.zip

    Spring ORM模块就是Spring框架对ORM技术的支持,它提供了与Hibernate、JPA、iBatis等主流ORM框架的集成,简化了数据访问层的开发。 二、Spring ORM核心组件 1. Hibernate支持:Spring提供了全面的Hibernate支持,...

    jeefuseMDA用户开发手册1

    Spring Email模块提供了发送邮件的功能,支持HTML邮件、附件等,可以方便地集成到应用中。 8. 用户界面: JSP 2.0 和 FreeMarker 是模板引擎,用于生成动态网页内容。JQuery是一个强大的JavaScript库,简化了DOM...

    Spring2.5jar所有开发包及完整文档及项开发实例.pdf

    8. `spring-orm.jar`:扩展了DAO特性,支持iBATIS,JDO,OJB,TopLink,但不包含Hibernate,因为Hibernate有自己的独立jar包。 9. `spring-remoting.jar`:提供EJB,JMS,远程调用(RMI,Hessian,Burlap,...

    spring2.0-reference_final_zh_cn

    3. **数据访问集成**:Spring 提供了对多种数据库访问技术的支持,包括 JDBC、Hibernate、JDO 和 iBATIS 等。它通过提供模板类和回调接口简化了数据访问操作,减少了冗余代码,并支持事务管理。 4. **MVC(Model-...

Global site tag (gtag.js) - Google Analytics