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-2-Tutorial_cniBATIS-SqlMaps-2-Tutorial_cn.pdf.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdf
apache开源项目源码ibatis-3-core-src-3.0.0.227 ibatis框架java源程序 spring,struts,hibernate,ibatis,框架源码 各种ibatis框架应用源码,你会从中得到意想不到的效果! apache开源组织开发的开源项目源码,其...
ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园
iBATIS-SqlMaps-2_cn中文文档
Ibatis基本配置---[环境搭建
iBATIS框架源码剖析-任钢
ibatis-SqlMaps-开发指南-version 1.0; ibatis-SqlMaps-开发指南-version 2
ibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zip
iBATIS-SqlMaps-2_ja说明资料
iBATIS-SqlMaps ibatis入门教程,教你如何做配置ibatis
ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip
ibatis-3-core-3.0.0.200
ibatis 入门很不错的书! 大力推荐
快速进入IBATIS的好教材,本教材是IBATIS中文版,非常的适合IBATIS初学者来学习,对经验者也是一本非常好的参考资料。
ibatis-sqlmap ibatis-sqlmap-2 ibatis-sqlmap-2.jar.zip
ibatis2-dao-2.1.6.589.jar文件,ibatis实现控制层
iBATIS-SqlMaps-2_en
iBATIS-SqlMaps-2-Tutorial_en.rar
10_ibatis教程_ibatis-2.3.3.720.zip 10_ibatis教程_ibatis-2.3.3.720.zip
iBATIS-SqlMaps-2_cn中文iBATIS资料