/*
* Copyright 2009-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ibatis.executor.resultset;
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import org.apache.ibatis.cache.CacheKey;
import org.apache.ibatis.executor.ErrorContext;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.executor.ExecutorException;
import org.apache.ibatis.executor.loader.ResultLoader;
import org.apache.ibatis.executor.loader.ResultLoaderMap;
import org.apache.ibatis.executor.parameter.ParameterHandler;
import org.apache.ibatis.executor.result.DefaultResultContext;
import org.apache.ibatis.executor.result.DefaultResultHandler;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.Discriminator;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.mapping.ParameterMode;
import org.apache.ibatis.mapping.ResultMap;
import org.apache.ibatis.mapping.ResultMapping;
import org.apache.ibatis.reflection.MetaClass;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.factory.ObjectFactory;
import org.apache.ibatis.session.AutoMappingBehavior;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.ResultContext;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.type.TypeHandler;
import org.apache.ibatis.type.TypeHandlerRegistry;
/**
* @author Clinton Begin
* @author Eduardo Macarron
*/
public class DefaultResultSetHandler implements ResultSetHandler {
private static final Object NO_VALUE = new Object();
private final Executor executor;
private final Configuration configuration;
private final MappedStatement mappedStatement;
private final RowBounds rowBounds;
private final ParameterHandler parameterHandler;
private final ResultHandler resultHandler;
private final BoundSql boundSql;
private final TypeHandlerRegistry typeHandlerRegistry;
private final ObjectFactory objectFactory;
// nested resultmaps
private final Map<CacheKey, Object> nestedResultObjects = new HashMap<CacheKey, Object>();
private final Map<CacheKey, Object> ancestorObjects = new HashMap<CacheKey, Object>();
private final Map<String, String> ancestorColumnPrefix = new HashMap<String, String>();
public static final String BATCHSAVE = ".BaseMapper.";
// multiple resultsets
private final Map<String, ResultMapping> nextResultMaps = new HashMap<String, ResultMapping>();
private final Map<CacheKey, List<PendingRelation>> pendingRelations = new HashMap<CacheKey, List<PendingRelation>>();
private static class PendingRelation {
public MetaObject metaObject;
public ResultMapping propertyMapping;
}
public DefaultResultSetHandler(Executor executor, MappedStatement mappedStatement, ParameterHandler parameterHandler, ResultHandler resultHandler, BoundSql boundSql,
RowBounds rowBounds) {
this.executor = executor;
this.configuration = mappedStatement.getConfiguration();
this.mappedStatement = mappedStatement;
this.rowBounds = rowBounds;
this.parameterHandler = parameterHandler;
this.boundSql = boundSql;
this.typeHandlerRegistry = configuration.getTypeHandlerRegistry();
this.objectFactory = configuration.getObjectFactory();
this.resultHandler = resultHandler;
}
//
// HANDLE OUTPUT PARAMETER
//
public void handleOutputParameters(CallableStatement cs) throws SQLException {
final Object parameterObject = parameterHandler.getParameterObject();
final MetaObject metaParam = configuration.newMetaObject(parameterObject);
final List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
for (int i = 0; i < parameterMappings.size(); i++) {
final ParameterMapping parameterMapping = parameterMappings.get(i);
if (parameterMapping.getMode() == ParameterMode.OUT || parameterMapping.getMode() == ParameterMode.INOUT) {
if (ResultSet.class.equals(parameterMapping.getJavaType())) {
handleRefCursorOutputParameter((ResultSet) cs.getObject(i + 1), parameterMapping, metaParam);
} else {
final TypeHandler<?> typeHandler = parameterMapping.getTypeHandler();
metaParam.setValue(parameterMapping.getProperty(), typeHandler.getResult(cs, i + 1));
}
}
}
}
private void handleRefCursorOutputParameter(ResultSet rs, ParameterMapping parameterMapping, MetaObject metaParam) throws SQLException {
try {
final String resultMapId = parameterMapping.getResultMapId();
final ResultMap resultMap = configuration.getResultMap(resultMapId);
final DefaultResultHandler resultHandler = new DefaultResultHandler(objectFactory);
final ResultSetWrapper rsw = new ResultSetWrapper(rs, configuration);
handleRowValues(rsw, resultMap, resultHandler, new RowBounds(), null);
metaParam.setValue(parameterMapping.getProperty(), resultHandler.getResultList());
} finally {
closeResultSet(rs); // issue #228 (close resultsets)
}
}
//
// HANDLE RESULT SETS
//
@SuppressWarnings({ "unchecked", "rawtypes" })
public List<Object> handleResultSets(Statement stmt) throws SQLException {
ErrorContext.instance().activity("handling results").object(mappedStatement.getId());
final List<Object> multipleResults = new ArrayList<Object>();
int resultSetCount = 0;
ResultSetWrapper rsw = getFirstResultSet(stmt);
List<ResultMap> resultMaps = mappedStatement.getResultMaps();
int resultMapCount = resultMaps.size();
validateResultMapsCount(rsw, resultMapCount);
while (rsw != null && resultMapCount > resultSetCount) {
ResultMap resultMap = resultMaps.get(resultSetCount);
handleResultSet(rsw, resultMap, multipleResults, null);
rsw = getNextResultSet(stmt);
cleanUpAfterHandlingResultSet();
resultSetCount++;
}
String[] resultSets = mappedStatement.getResulSets();
if (resultSets != null) {
while (rsw != null && resultSetCount < resultSets.length) {
ResultMapping parentMapping = nextResultMaps.get(resultSets[resultSetCount]);
if (parentMapping != null) {
String nestedResultMapId = parentMapping.getNestedResultMapId();
ResultMap resultMap = configuration.getResultMap(nestedResultMapId);
handleResultSet(rsw, resultMap, null, parentMapping);
}
rsw = getNextResultSet(stmt);
cleanUpAfterHandlingResultSet();
resultSetCount++;
}
}
List<Object> lists = collapseSingleResultList(multipleResults);
if(mappedStatement.getId().indexOf(BATCHSAVE)>-1){
try {
List<Object> mlist = new ArrayList<Object>();
Object parameterObject = boundSql.getParameterObject();
Map map = (Map) parameterObject;
Object o3 = null;
if(null!=map){
o3=map.get("param3");
}
for (Object object : lists) {
Map<String, Object> m = (Map) object;
Object o = null;
if(null!=o3){
Class fm = (Class) o3;
o= fm.newInstance();
}else{
o = (Object) parameterObject.ge
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于springmvc+shiro的权限项目 (1033个子文件)
DefaultResultSetHandler.class 38KB
Configuration.class 30KB
MapperBuilderAssistant.class 27KB
MapperAnnotationBuilder.class 25KB
XMLMapperBuilder.class 20KB
XMLConfigBuilder.class 16KB
PooledDataSource.class 16KB
TypeHandlerRegistry.class 16KB
Common.class 15KB
Plugin.class 15KB
Reflector.class 15KB
SqlSessionManager.class 12KB
PagePlugin.class 11KB
XNode.class 11KB
DefaultSqlSession.class 11KB
BackgroundController.class 10KB
XMLStatementBuilder.class 10KB
XPathParser.class 10KB
MappedStatement.class 9KB
MapperMethod.class 9KB
ResourcesController.class 9KB
MappedStatement$Builder.class 9KB
SqlRunner.class 9KB
CacheBuilder.class 8KB
UnpooledDataSource.class 8KB
EhcacheUtils.class 8KB
ResultMapping$Builder.class 8KB
ScriptRunner.class 8KB
JsonUtils.class 8KB
ResultSetWrapper.class 7KB
MapperMethod$MethodSignature.class 7KB
SqlSourceBuilder$ParameterMappingTokenHandler.class 7KB
DefaultVFS.class 7KB
BeanWrapper.class 7KB
UserController.class 7KB
SystemInfo.class 7KB
TypeAliasRegistry.class 6KB
LogAopAction.class 6KB
BaseController.class 6KB
ResultMapping.class 6KB
MetaClass.class 6KB
VFS.class 6KB
UnknownTypeHandler.class 6KB
BaseBuilder.class 6KB
ParameterMapping$Builder.class 6KB
SpringTaskController.class 6KB
ResolverUtil.class 6KB
MetaObject.class 6KB
DefaultSqlSessionFactory.class 6KB
ScaleImage.class 6KB
CallableStatementHandler.class 5KB
BaseStatementHandler.class 5KB
ClassUtil.class 5KB
MapWrapper.class 5KB
AbstractSQL$SQLStatement.class 5KB
Jdbc3KeyGenerator.class 5KB
ResultMap$Builder.class 5KB
MyRealm.class 5KB
RoleController.class 5KB
SelectKeyGenerator.class 5KB
AbstractSQL.class 5KB
PoolState.class 5KB
MapperRegistry.class 5KB
Resources.class 5KB
PooledConnection.class 5KB
JBoss6VFS.class 4KB
ResultMap.class 4KB
KickoutSessionControlFilter.class 4KB
DefaultObjectFactory.class 4KB
TreeUtil.class 4KB
ParameterMapping.class 4KB
ConfigUtils.class 4KB
Null.class 4KB
PreparedStatementHandler.class 4KB
EnumOrdinalTypeHandler.class 4KB
MonitorController.class 4KB
FormMap.class 4KB
UnicodeUtils.class 4KB
BaseWrapper.class 4KB
JdbcTransaction.class 4KB
ClassLoaderWrapper.class 4KB
ExcelUtil.class 4KB
SimpleStatementHandler.class 4KB
RoutingStatementHandler.class 4KB
XMLIncludeTransformer.class 3KB
UnpooledDataSourceFactory.class 3KB
Configuration$StrictMap.class 3KB
BaseTypeHandler.class 3KB
ParameterExpression.class 3KB
JdbcType.class 3KB
SqlSessionFactoryBuilder.class 3KB
ProviderSqlSource.class 3KB
PropertiesUtils.class 3KB
PageView.class 3KB
DownloadUtils.class 3KB
UploadUtil.class 3KB
SQLServer2008Dialect.class 3KB
EnumTypeHandler.class 3KB
SpringCacheManagerWrapper$SpringCacheWrapper.class 3KB
ChainDefinitionSectionMetaSource.class 3KB
共 1033 条
- 1
- 2
- 3
- 4
- 5
- 6
- 11
资源评论
lanhai_edu
- 粉丝: 4
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功