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取得缓存的对象。
分享到:
相关推荐
11. **源码分析**:对于进阶读者,可以进一步研究iBATIS的源码,了解其实现原理,有助于更深入地理解框架。 12. **工具支持**:介绍一些辅助开发的工具,如MyBatis Generator,它可以自动生成iBATIS相关的Java代码...
描述中的"ibatis框架源码剖析书中附带的光盘,ibatis源码分析"暗示这可能是一个学习资源,用于深入理解iBATIS的工作原理,可能包括了对源码的详细解读和分析。 **iBATIS核心知识点** 1. **SQL映射**:iBATIS的核心...
《深入解析iBatis源码》 iBatis,一个优秀的Java持久层框架,以其轻量级、灵活的特性在众多ORM(Object-Relational Mapping)框架中独树一帜。iBatis的核心在于它的SQL映射机制,它将数据库操作与业务逻辑解耦,...
总的来说,iBATIS DAO 2.3.4.726版的源码分析对于学习和理解Java中的持久层设计有极大的帮助。通过阅读和理解源码,开发者不仅能掌握iBATIS DAO的基本使用,还能深入了解其内部实现,提升数据库操作的技巧和优化能力...
通过深入分析iBATIS的源码,开发者不仅可以了解其工作原理,还能学习到设计模式、数据库访问的最佳实践以及如何优雅地处理数据库操作。对于提升Java开发者的技能和理解数据库访问层的实现有极大的帮助。在实际开发中...
四、源码分析 iBatis的核心源码中,SqlSessionManager是整个框架的入口,负责创建SqlSession对象并管理事务。Executor接口及其实现类(SimpleExecutor、ReuseExecutor、BatchExecutor)是执行SQL的关键。在执行SQL...
6. **插件支持**:Ibatis允许用户自定义插件,可以通过拦截器对SQL执行过程进行扩展,如性能分析、日志记录等。 7. **结果集处理**:支持多种结果集处理方式,包括Map、List、单个对象以及自定义的Java集合类,便于...
《深入解析iBatis 2.3源码》 iBatis,作为一款经典的Java持久层框架,以其轻量级、灵活的特性深受开发者喜爱。...在实际项目中,结合源码分析,能够更好地定制和扩展iBatis,满足特定的业务需求。
接下来,关于源码分析: 1. 源码阅读:源码中包含Ibatis的所有核心组件,如SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession等。通过阅读源码,可以深入了解其工作原理,例如如何加载配置文件、如何创建和...
《深入解析iBatis 2.3.4.726源码》 iBatis,作为一款轻量级的Java持久层框架,以其灵活、高效的特点,在许多项目中得到了广泛应用。本文将针对iBatis 2.3.4.726版本的源代码进行详尽解读,帮助开发者深入了解其内部...
8. **源码分析**:深入Ibatis源码,理解其执行流程和优化技巧。 9. **工具支持**:了解IDE中对Ibatis的支持,如插件安装和配置,以及如何利用它们提高开发效率。 通过以上知识点的学习,开发者能更好地掌握Ibatis-...
一、**IBatis源码分析** IBatis的源码是开源的,这对于开发者来说是一份宝贵的资源,可以让我们深入了解其工作原理和内部机制。通过阅读源码,我们可以学习到以下知识点: 1. **动态SQL**:IBatis的核心功能之一...
- **插件支持**:可以扩展 iBATIS 功能,例如日志、性能分析等。 开发者使用 iBATIS 可以实现更细粒度的数据库操作控制,避免了 EJB 的复杂性,同时保留了 JDBC 的灵活性。在 iBATIS 2.x 版本中,XML 是主要的配置...
【标题】"ibatis2.3源码"指的是开源的SQL映射框架iBATIS的2.3版本的源代码。iBATIS是Java平台上的一种轻量级持久层框架,它将SQL语句与Java代码分离,使得开发者可以更加灵活地处理数据库操作。 【描述】中的"可以...
《深入解析iBatis 2.3.0.677源码》 ...总之,通过对iBatis 2.3.0.677源码的分析,我们可以掌握其设计理念和工作原理,提升我们在Java持久层开发中的技术水平。无论是初学者还是经验丰富的开发者,都能从中受益匪浅。
源码分析部分,我们可以看到iBATIS如何解析XML配置文件,如何通过反射机制调用Java方法,以及如何将查询结果自动映射到Java对象上。这对于理解iBATIS的工作流程及其内部机制至关重要。 在"iBATIS开发指南电子书"中...
在IT行业中,数据库缓存是提高应用程序性能的关键技术之一,Memcached是一款广泛使用的分布式内存对象缓存系统,而iBatis则是一个优秀的SQL映射框架。本文将详细讲解如何将iBatis与Memcached整合,以及相关的源码...
9. **缓存机制**:Ibatis提供了本地缓存和二级缓存,学习如何配置和使用缓存,可以有效地减少数据库访问,提升应用性能。 通过赖家才老师的源码学习,你可以亲手实践这些知识点,加深理解并掌握Ibatis的精髓。同时...
通过对源码的学习,我们可以了解iBatis内部的工作原理,比如它如何解析XML配置文件,如何执行SQL语句,以及如何处理结果集。这对于深入理解iBatis以及优化自己的代码非常有帮助。 总的来说,这个压缩包提供了全面的...