`
michael.softtech
  • 浏览: 208600 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

ibatis源码分析之---缓存

阅读更多
 public Object executeQueryForObject(RequestScope request, Transaction trans, Object parameterObject, Object resultObject)
        throws SQLException
    {
        CacheKey cacheKey = getCacheKey(request, parameterObject);
        cacheKey.update("executeQueryForObject");
        Object object = cacheModel.getObject(cacheKey);
        if(object == CacheModel.NULL_OBJECT)
            object = null;
        else
        if(object == null)
        {
            object = statement.executeQueryForObject(request, trans, parameterObject, resultObject);
            cacheModel.putObject(cacheKey, object);
        }
        return object;
    }

 ibatis的配置文件里面有一个cache项:

 

sqlMapConfig >  

     < settings 
       cacheModelsEnabled ="true"      
      enhancementEnabled ="true"      
      lazyLoadingEnabled ="true"      
      errorTracingEnabled ="true"      
      maxRequests ="32"           
      maxSessions ="10"           
      maxTransactions ="5"          
      useStatementNamespaces ="false"    
       />  

 

 

     cacheModelsEnabled 设置了ibatis在进行查询时是不是要进行缓存,如果设置了,那么在查询时先到缓存中查询,如果缓存中没有,那么就到数据库查询,并且把查询结果存储到缓存里面。

   ibatis里面的jdbc操作最终是由SqlMapExecutorDelegate类执行的,比如查询

  :

 

 

public Object queryForObject(SessionScope session, String id, Object paramObject, Object resultObject)
        throws SQLException
    {
        Object object;
        MappedStatement ms;
        Transaction trans;
        boolean autoStart;
        object = null;
        ms = getMappedStatement(id);
        trans = getTransaction(session);
        autoStart = trans == null;
        RequestScope request;
        trans = autoStartTransaction(session, autoStart, trans);
        request = popRequest(session, ms);
        object = ms.executeQueryForObject(request, trans, paramObject, resultObject);
        pushRequest(request);
        break MISSING_BLOCK_LABEL_85;
        Exception exception;
        exception;
        pushRequest(request);
        throw exception;
        autoCommitTransaction(session, autoStart);
        autoEndTransaction(session, autoStart);
        break MISSING_BLOCK_LABEL_114;
        Exception exception1;
        exception1;
        autoEndTransaction(session, autoStart);
        throw exception1;
        return object;
    }

 

   如果在配置文嘉里面设置了缓存,那么这时候会使用一个CachingStatement:

   

   

 public Object executeQueryForObject(RequestScope request, Transaction trans, Object parameterObject, Object resultObject)
        throws SQLException
    {
        CacheKey cacheKey = getCacheKey(request, parameterObject);
        cacheKey.update("executeQueryForObject");
        Object object = cacheModel.getObject(cacheKey);
        if(object == CacheModel.NULL_OBJECT)
            object = null;
        else
        if(object == null)
        {
            object = statement.executeQueryForObject(request, trans, parameterObject, resultObject);
            cacheModel.putObject(cacheKey, object);
        }
        return object;
    }

 

    其中的CashModel是一个线程安全的类。用来根据key取得缓存的对象。

 

分享到:
评论

相关推荐

    iBATIS-SqlMaps-中文教程

    11. **源码分析**:对于进阶读者,可以进一步研究iBATIS的源码,了解其实现原理,有助于更深入地理解框架。 12. **工具支持**:介绍一些辅助开发的工具,如MyBatis Generator,它可以自动生成iBATIS相关的Java代码...

    ibatis源码

    描述中的"ibatis框架源码剖析书中附带的光盘,ibatis源码分析"暗示这可能是一个学习资源,用于深入理解iBATIS的工作原理,可能包括了对源码的详细解读和分析。 **iBATIS核心知识点** 1. **SQL映射**:iBATIS的核心...

    ibatis源码,ibatis源码 ibatis源码 ibatis源码

    《深入解析iBatis源码》 iBatis,一个优秀的Java持久层框架,以其轻量级、灵活的特性在众多ORM(Object-Relational Mapping)框架中独树一帜。iBatis的核心在于它的SQL映射机制,它将数据库操作与业务逻辑解耦,...

    iBATIS-DAO-2.3.4.726.rar_com.ibatis.dao_iBATIS dao 2_iBatis DAO_

    总的来说,iBATIS DAO 2.3.4.726版的源码分析对于学习和理解Java中的持久层设计有极大的帮助。通过阅读和理解源码,开发者不仅能掌握iBATIS DAO的基本使用,还能深入了解其内部实现,提升数据库操作的技巧和优化能力...

    iBATIS框架源码剖析源码

    通过深入分析iBATIS的源码,开发者不仅可以了解其工作原理,还能学习到设计模式、数据库访问的最佳实践以及如何优雅地处理数据库操作。对于提升Java开发者的技能和理解数据库访问层的实现有极大的帮助。在实际开发中...

    ibatis-2-mybatis-2.3.5.zip

    四、源码分析 iBatis的核心源码中,SqlSessionManager是整个框架的入口,负责创建SqlSession对象并管理事务。Executor接口及其实现类(SimpleExecutor、ReuseExecutor、BatchExecutor)是执行SQL的关键。在执行SQL...

    ibatis-2.3.3.720.jar

    6. **插件支持**:Ibatis允许用户自定义插件,可以通过拦截器对SQL执行过程进行扩展,如性能分析、日志记录等。 7. **结果集处理**:支持多种结果集处理方式,包括Map、List、单个对象以及自定义的Java集合类,便于...

    ibatis2.3-src

    《深入解析iBatis 2.3源码》 iBatis,作为一款经典的Java持久层框架,以其轻量级、灵活的特性深受开发者喜爱。...在实际项目中,结合源码分析,能够更好地定制和扩展iBatis,满足特定的业务需求。

    ibatis源码+api文档+jar包

    接下来,关于源码分析: 1. 源码阅读:源码中包含Ibatis的所有核心组件,如SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession等。通过阅读源码,可以深入了解其工作原理,例如如何加载配置文件、如何创建和...

    ibatis-2.3.4.726-src-源代码

    《深入解析iBatis 2.3.4.726源码》 iBatis,作为一款轻量级的Java持久层框架,以其灵活、高效的特点,在许多项目中得到了广泛应用。本文将针对iBatis 2.3.4.726版本的源代码进行详尽解读,帮助开发者深入了解其内部...

    ibatis-sqlMap相关参考

    8. **源码分析**:深入Ibatis源码,理解其执行流程和优化技巧。 9. **工具支持**:了解IDE中对Ibatis的支持,如插件安装和配置,以及如何利用它们提高开发效率。 通过以上知识点的学习,开发者能更好地掌握Ibatis-...

    IBatis源码+xsd+帮助

    一、**IBatis源码分析** IBatis的源码是开源的,这对于开发者来说是一份宝贵的资源,可以让我们深入了解其工作原理和内部机制。通过阅读源码,我们可以学习到以下知识点: 1. **动态SQL**:IBatis的核心功能之一...

    ibatis-2.3.0.677.jar

    - **插件支持**:可以扩展 iBATIS 功能,例如日志、性能分析等。 开发者使用 iBATIS 可以实现更细粒度的数据库操作控制,避免了 EJB 的复杂性,同时保留了 JDBC 的灵活性。在 iBATIS 2.x 版本中,XML 是主要的配置...

    ibatis2.3源码

    【标题】"ibatis2.3源码"指的是开源的SQL映射框架iBATIS的2.3版本的源代码。iBATIS是Java平台上的一种轻量级持久层框架,它将SQL语句与Java代码分离,使得开发者可以更加灵活地处理数据库操作。 【描述】中的"可以...

    ibatis-2.3.0.677

    《深入解析iBatis 2.3.0.677源码》 ...总之,通过对iBatis 2.3.0.677源码的分析,我们可以掌握其设计理念和工作原理,提升我们在Java持久层开发中的技术水平。无论是初学者还是经验丰富的开发者,都能从中受益匪浅。

    iBATIS入门讲解和程序源码+iBATIS开发指南电子书

    源码分析部分,我们可以看到iBATIS如何解析XML配置文件,如何通过反射机制调用Java方法,以及如何将查询结果自动映射到Java对象上。这对于理解iBATIS的工作流程及其内部机制至关重要。 在"iBATIS开发指南电子书"中...

    ibatis memcached 整合 源码 文档

    在IT行业中,数据库缓存是提高应用程序性能的关键技术之一,Memcached是一款广泛使用的分布式内存对象缓存系统,而iBatis则是一个优秀的SQL映射框架。本文将详细讲解如何将iBatis与Memcached整合,以及相关的源码...

    传智ibatis视频源码

    9. **缓存机制**:Ibatis提供了本地缓存和二级缓存,学习如何配置和使用缓存,可以有效地减少数据库访问,提升应用性能。 通过赖家才老师的源码学习,你可以亲手实践这些知识点,加深理解并掌握Ibatis的精髓。同时...

    iBatis实战and源代码.zip

    通过对源码的学习,我们可以了解iBatis内部的工作原理,比如它如何解析XML配置文件,如何执行SQL语句,以及如何处理结果集。这对于深入理解iBatis以及优化自己的代码非常有帮助。 总的来说,这个压缩包提供了全面的...

Global site tag (gtag.js) - Google Analytics