/**
* Copyright 2009-2017 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 org.apache.ibatis.annotations.AutomapConstructor;
import org.apache.ibatis.binding.MapperMethod.ParamMap;
import org.apache.ibatis.cache.CacheKey;
import org.apache.ibatis.cursor.Cursor;
import org.apache.ibatis.cursor.defaults.DefaultCursor;
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.executor.result.ResultMapException;
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.ReflectorFactory;
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;
import java.lang.reflect.Constructor;
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;
/**
* @author Clinton Begin
* @author Eduardo Macarron
* @author Iwao AVE!
* @author Kazuki Shimizu
*/
public class DefaultResultSetHandler implements ResultSetHandler {
private static final Object DEFERED = 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;
private final ReflectorFactory reflectorFactory;
// nested resultmaps
private final Map<CacheKey, Object> nestedResultObjects = new HashMap<CacheKey, Object>();
private final Map<String, Object> ancestorObjects = new HashMap<String, Object>();
private Object previousRowValue;
// multiple resultsets
private final Map<String, ResultMapping> nextResultMaps = new HashMap<String, ResultMapping>();
private final Map<CacheKey, List<PendingRelation>> pendingRelations = new HashMap<CacheKey, List<PendingRelation>>();
// Cached Automappings
private final Map<String, List<UnMappedColumnAutoMapping>> autoMappingsCache = new HashMap<String, List<UnMappedColumnAutoMapping>>();
// temporary marking flag that indicate using constructor mapping (use field to reduce memory usage)
private boolean useConstructorMappings;
private final PrimitiveTypes primitiveTypes;
private static class PendingRelation {
public MetaObject metaObject;
public ResultMapping propertyMapping;
}
private static class UnMappedColumnAutoMapping {
private final String column;
private final String property;
private final TypeHandler<?> typeHandler;
private final boolean primitive;
public UnMappedColumnAutoMapping(String column, String property, TypeHandler<?> typeHandler, boolean primitive) {
this.column = column;
this.property = property;
this.typeHandler = typeHandler;
this.primitive = primitive;
}
}
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.reflectorFactory = configuration.getReflectorFactory();
this.resultHandler = resultHandler;
this.primitiveTypes = new PrimitiveTypes();
}
//
// HANDLE OUTPUT PARAMETER
//
@Override
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 {
if (rs == null) {
return;
}
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 {
// issue #228 (close resultsets)
closeResultSet(rs);
}
}
//
// HANDLE RESULT SETS
//
@Override
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
没有合适的资源?快使用搜索试试~ 我知道了~
Mybatis源码可直接导入eclipse
共965个文件
class:455个
java:380个
xml:99个
需积分: 32 25 下载量 120 浏览量
2017-09-22
10:18:37
上传
评论
收藏 3.23MB RAR 举报
温馨提示
Mybatis源码可直接导入eclipse;Mybatis源码可直接导入eclipse;Mybatis源码可直接导入eclipse;Mybatis源码可直接导入eclipse;
资源推荐
资源详情
资源评论
收起资源包目录
Mybatis源码可直接导入eclipse (965个子文件)
DefaultResultSetHandler.class 49KB
Configuration.class 32KB
MapperAnnotationBuilder.class 30KB
MapperBuilderAssistant.class 26KB
XMLMapperBuilder.class 21KB
TypeHandlerRegistry.class 19KB
XMLConfigBuilder.class 19KB
PooledDataSource.class 16KB
Reflector.class 16KB
BaseExecutor.class 15KB
DefaultSqlSession.class 13KB
SqlSessionManager.class 13KB
XNode.class 11KB
XMLStatementBuilder.class 11KB
MapperMethod.class 10KB
ResultMap$Builder.class 10KB
XPathParser.class 10KB
MappedStatement.class 9KB
MappedStatement$Builder.class 9KB
CacheBuilder.class 9KB
BatchExecutor.class 9KB
ScriptRunner.class 8KB
SqlRunner.class 8KB
TypeParameterResolver.class 8KB
ResultSetWrapper.class 8KB
UnpooledDataSource.class 8KB
DefaultVFS.class 8KB
CachingExecutor.class 8KB
ResultMapping$Builder.class 8KB
BeanWrapper.class 7KB
ProviderSqlSource.class 7KB
SqlSourceBuilder$ParameterMappingTokenHandler.class 7KB
ResultLoaderMap$LoadPair.class 7KB
ResultMapping.class 7KB
AbstractSQL.class 7KB
MetaClass.class 7KB
Jdbc3KeyGenerator.class 7KB
TypeAliasRegistry.class 7KB
VFS.class 6KB
UnknownTypeHandler.class 6KB
ReuseExecutor.class 6KB
BaseBuilder.class 6KB
XMLScriptBuilder.class 6KB
ParameterMapping$Builder.class 6KB
CallableStatementHandler.class 6KB
MetaObject.class 6KB
BaseStatementHandler.class 6KB
CglibProxyFactory.class 6KB
DefaultSqlSessionFactory.class 6KB
ResolverUtil.class 6KB
Plugin.class 5KB
CglibProxyFactory$EnhancedResultObjectProxyImpl.class 5KB
MapWrapper.class 5KB
JavassistProxyFactory$EnhancedResultObjectProxyImpl.class 5KB
BaseJdbcLogger.class 5KB
AbstractSQL$SQLStatement.class 5KB
MapperMethod$MethodSignature.class 5KB
SelectKeyGenerator.class 5KB
DefaultCursor.class 5KB
XMLIncludeTransformer.class 5KB
AbstractSerialStateHolder.class 5KB
ResultMap.class 5KB
ResultLoader.class 5KB
ForEachSqlNode.class 5KB
AbstractEnhancedDeserializationProxy.class 5KB
MapperRegistry.class 5KB
ParameterMapping.class 5KB
ParamNameResolver.class 5KB
SimpleExecutor.class 5KB
DefaultParameterHandler.class 5KB
PoolState.class 5KB
Resources.class 5KB
PooledConnection.class 5KB
DefaultObjectFactory.class 5KB
ResultSetLogger.class 5KB
JBoss6VFS.class 4KB
MapperProxy.class 4KB
CglibProxyFactory$EnhancedDeserializationProxyImpl.class 4KB
PreparedStatementHandler.class 4KB
JavassistProxyFactory$EnhancedDeserializationProxyImpl.class 4KB
BaseTypeHandler.class 4KB
Null.class 4KB
RoutingStatementHandler.class 4KB
JavassistProxyFactory.class 4KB
LogFactory.class 4KB
ResultLoaderMap.class 4KB
SimpleStatementHandler.class 4KB
EnumOrdinalTypeHandler.class 4KB
XMLScriptBuilder$ChooseHandler.class 4KB
JdbcTransaction.class 4KB
TransactionalCache.class 4KB
JdbcType.class 4KB
ClassLoaderWrapper.class 4KB
BaseWrapper.class 4KB
TrimSqlNode$FilteredDynamicContext.class 4KB
TrimSqlNode.class 4KB
PreparedStatementLogger.class 4KB
BlockingCache.class 4KB
SqlSessionFactoryBuilder.class 4KB
XMLLanguageDriver.class 4KB
共 965 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10
资源评论
张云生
- 粉丝: 21
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功