Class DefaultResultSetHandler
- java.lang.Object
-
- org.apache.ibatis.executor.resultset.DefaultResultSetHandler
-
- All Implemented Interfaces:
ResultSetHandler
public class DefaultResultSetHandler extends java.lang.Object implements ResultSetHandler
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classDefaultResultSetHandler.PendingRelationprivate static classDefaultResultSetHandler.UnMappedColumnAutoMapping
-
Field Summary
Fields Modifier and Type Field Description private java.util.Map<java.lang.String,java.lang.Object>ancestorObjectsprivate java.util.Map<java.lang.String,java.util.List<DefaultResultSetHandler.UnMappedColumnAutoMapping>>autoMappingsCacheprivate BoundSqlboundSqlprivate Configurationconfigurationprivate static java.lang.ObjectDEFERREDprivate Executorexecutorprivate MappedStatementmappedStatementprivate java.util.Map<CacheKey,java.lang.Object>nestedResultObjectsprivate java.util.Map<java.lang.String,ResultMapping>nextResultMapsprivate ObjectFactoryobjectFactoryprivate ParameterHandlerparameterHandlerprivate java.util.Map<CacheKey,java.util.List<DefaultResultSetHandler.PendingRelation>>pendingRelationsprivate java.lang.ObjectpreviousRowValueprivate ReflectorFactoryreflectorFactoryprivate ResultHandler<?>resultHandlerprivate RowBoundsrowBoundsprivate TypeHandlerRegistrytypeHandlerRegistryprivate booleanuseConstructorMappings
-
Constructor Summary
Constructors Constructor Description DefaultResultSetHandler(Executor executor, MappedStatement mappedStatement, ParameterHandler parameterHandler, ResultHandler<?> resultHandler, BoundSql boundSql, RowBounds rowBounds)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidaddPendingChildRelation(java.sql.ResultSet rs, MetaObject metaResultObject, ResultMapping parentMapping)private booleanallowedConstructorUsingTypeHandlers(java.lang.reflect.Constructor<?> constructor, java.util.List<JdbcType> jdbcTypes)private booleananyNotNullColumnHasValue(ResultMapping resultMapping, java.lang.String columnPrefix, ResultSetWrapper rsw)private booleanapplyAutomaticMappings(ResultSetWrapper rsw, ResultMap resultMap, MetaObject metaObject, java.lang.String columnPrefix)private booleanapplyNestedResultMappings(ResultSetWrapper rsw, ResultMap resultMap, MetaObject metaObject, java.lang.String parentPrefix, CacheKey parentRowKey, boolean newObject)private booleanapplyPropertyMappings(ResultSetWrapper rsw, ResultMap resultMap, MetaObject metaObject, ResultLoaderMap lazyLoader, java.lang.String columnPrefix)private voidcallResultHandler(ResultHandler<?> resultHandler, DefaultResultContext<java.lang.Object> resultContext, java.lang.Object rowValue)protected voidcheckResultHandler()private voidcleanUpAfterHandlingResultSet()private voidcloseResultSet(java.sql.ResultSet rs)private java.util.List<java.lang.Object>collapseSingleResultList(java.util.List<java.lang.Object> multipleResults)private CacheKeycombineKeys(CacheKey rowKey, CacheKey parentRowKey)private java.util.List<DefaultResultSetHandler.UnMappedColumnAutoMapping>createAutomaticMappings(ResultSetWrapper rsw, ResultMap resultMap, MetaObject metaObject, java.lang.String columnPrefix)private java.lang.ObjectcreateByConstructorSignature(ResultSetWrapper rsw, java.lang.Class<?> resultType, java.util.List<java.lang.Class<?>> constructorArgTypes, java.util.List<java.lang.Object> constructorArgs)private CacheKeycreateKeyForMultipleResults(java.sql.ResultSet rs, ResultMapping resultMapping, java.lang.String names, java.lang.String columns)(package private) java.lang.ObjectcreateParameterizedResultObject(ResultSetWrapper rsw, java.lang.Class<?> resultType, java.util.List<ResultMapping> constructorMappings, java.util.List<java.lang.Class<?>> constructorArgTypes, java.util.List<java.lang.Object> constructorArgs, java.lang.String columnPrefix)private java.lang.ObjectcreatePrimitiveResultObject(ResultSetWrapper rsw, ResultMap resultMap, java.lang.String columnPrefix)private java.lang.ObjectcreateResultObject(ResultSetWrapper rsw, ResultMap resultMap, java.util.List<java.lang.Class<?>> constructorArgTypes, java.util.List<java.lang.Object> constructorArgs, java.lang.String columnPrefix)private java.lang.ObjectcreateResultObject(ResultSetWrapper rsw, ResultMap resultMap, ResultLoaderMap lazyLoader, java.lang.String columnPrefix)private CacheKeycreateRowKey(ResultMap resultMap, ResultSetWrapper rsw, java.lang.String columnPrefix)private voidcreateRowKeyForMap(ResultSetWrapper rsw, CacheKey cacheKey)private voidcreateRowKeyForMappedProperties(ResultMap resultMap, ResultSetWrapper rsw, CacheKey cacheKey, java.util.List<ResultMapping> resultMappings, java.lang.String columnPrefix)private voidcreateRowKeyForUnmappedProperties(ResultMap resultMap, ResultSetWrapper rsw, CacheKey cacheKey, java.lang.String columnPrefix)private java.lang.ObjectcreateUsingConstructor(ResultSetWrapper rsw, java.lang.Class<?> resultType, java.util.List<java.lang.Class<?>> constructorArgTypes, java.util.List<java.lang.Object> constructorArgs, java.lang.reflect.Constructor<?> constructor)private voidensureNoRowBounds()private java.lang.reflect.Constructor<?>findDefaultConstructor(java.lang.reflect.Constructor<?>[] constructors)private java.lang.StringgetColumnPrefix(java.lang.String parentPrefix, ResultMapping resultMapping)private java.lang.ObjectgetDiscriminatorValue(java.sql.ResultSet rs, Discriminator discriminator, java.lang.String columnPrefix)private ResultSetWrappergetFirstResultSet(java.sql.Statement stmt)private java.lang.ObjectgetNestedQueryConstructorValue(java.sql.ResultSet rs, ResultMapping constructorMapping, java.lang.String columnPrefix)private java.lang.ObjectgetNestedQueryMappingValue(java.sql.ResultSet rs, MetaObject metaResultObject, ResultMapping propertyMapping, ResultLoaderMap lazyLoader, java.lang.String columnPrefix)private ResultMapgetNestedResultMap(java.sql.ResultSet rs, java.lang.String nestedResultMapId, java.lang.String columnPrefix)private ResultSetWrappergetNextResultSet(java.sql.Statement stmt)private java.lang.ObjectgetPropertyMappingValue(java.sql.ResultSet rs, MetaObject metaResultObject, ResultMapping propertyMapping, ResultLoaderMap lazyLoader, java.lang.String columnPrefix)private java.util.List<ResultMapping>getResultMappingsForRowKey(ResultMap resultMap)private java.lang.ObjectgetRowValue(ResultSetWrapper rsw, ResultMap resultMap, java.lang.String columnPrefix)private java.lang.ObjectgetRowValue(ResultSetWrapper rsw, ResultMap resultMap, CacheKey combinedKey, java.lang.String columnPrefix, java.lang.Object partialObject)<E> Cursor<E>handleCursorResultSets(java.sql.Statement stmt)voidhandleOutputParameters(java.sql.CallableStatement cs)private voidhandleRefCursorOutputParameter(java.sql.ResultSet rs, ParameterMapping parameterMapping, MetaObject metaParam)private voidhandleResultSet(ResultSetWrapper rsw, ResultMap resultMap, java.util.List<java.lang.Object> multipleResults, ResultMapping parentMapping)java.util.List<java.lang.Object>handleResultSets(java.sql.Statement stmt)voidhandleRowValues(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler<?> resultHandler, RowBounds rowBounds, ResultMapping parentMapping)private voidhandleRowValuesForNestedResultMap(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler<?> resultHandler, RowBounds rowBounds, ResultMapping parentMapping)private voidhandleRowValuesForSimpleResultMap(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler<?> resultHandler, RowBounds rowBounds, ResultMapping parentMapping)private booleanhasTypeHandlerForResultObject(ResultSetWrapper rsw, java.lang.Class<?> resultType)private java.lang.ObjectinstantiateCollectionPropertyIfAppropriate(ResultMapping resultMapping, MetaObject metaObject)private java.lang.ObjectinstantiateParameterObject(java.lang.Class<?> parameterType)private voidlinkObjects(MetaObject metaObject, ResultMapping resultMapping, java.lang.Object rowValue)private voidlinkToParents(java.sql.ResultSet rs, ResultMapping parentMapping, java.lang.Object rowValue)private java.lang.ObjectprepareCompositeKeyParameter(java.sql.ResultSet rs, ResultMapping resultMapping, java.lang.Class<?> parameterType, java.lang.String columnPrefix)private java.lang.ObjectprepareParameterForNestedQuery(java.sql.ResultSet rs, ResultMapping resultMapping, java.lang.Class<?> parameterType, java.lang.String columnPrefix)private java.lang.ObjectprepareSimpleKeyParameter(java.sql.ResultSet rs, ResultMapping resultMapping, java.lang.Class<?> parameterType, java.lang.String columnPrefix)private java.lang.StringprependPrefix(java.lang.String columnName, java.lang.String prefix)private voidputAncestor(java.lang.Object resultObject, java.lang.String resultMapId)ResultMapresolveDiscriminatedResultMap(java.sql.ResultSet rs, ResultMap resultMap, java.lang.String columnPrefix)private booleanshouldApplyAutomaticMappings(ResultMap resultMap, boolean isNested)private booleanshouldProcessMoreRows(ResultContext<?> context, RowBounds rowBounds)private voidskipRows(java.sql.ResultSet rs, RowBounds rowBounds)private voidstoreObject(ResultHandler<?> resultHandler, DefaultResultContext<java.lang.Object> resultContext, java.lang.Object rowValue, ResultMapping parentMapping, java.sql.ResultSet rs)private voidvalidateResultMapsCount(ResultSetWrapper rsw, int resultMapCount)
-
-
-
Field Detail
-
DEFERRED
private static final java.lang.Object DEFERRED
-
executor
private final Executor executor
-
configuration
private final Configuration configuration
-
mappedStatement
private final MappedStatement mappedStatement
-
rowBounds
private final RowBounds rowBounds
-
parameterHandler
private final ParameterHandler parameterHandler
-
resultHandler
private final ResultHandler<?> resultHandler
-
boundSql
private final BoundSql boundSql
-
typeHandlerRegistry
private final TypeHandlerRegistry typeHandlerRegistry
-
objectFactory
private final ObjectFactory objectFactory
-
reflectorFactory
private final ReflectorFactory reflectorFactory
-
nestedResultObjects
private final java.util.Map<CacheKey,java.lang.Object> nestedResultObjects
-
ancestorObjects
private final java.util.Map<java.lang.String,java.lang.Object> ancestorObjects
-
previousRowValue
private java.lang.Object previousRowValue
-
nextResultMaps
private final java.util.Map<java.lang.String,ResultMapping> nextResultMaps
-
pendingRelations
private final java.util.Map<CacheKey,java.util.List<DefaultResultSetHandler.PendingRelation>> pendingRelations
-
autoMappingsCache
private final java.util.Map<java.lang.String,java.util.List<DefaultResultSetHandler.UnMappedColumnAutoMapping>> autoMappingsCache
-
useConstructorMappings
private boolean useConstructorMappings
-
-
Constructor Detail
-
DefaultResultSetHandler
public DefaultResultSetHandler(Executor executor, MappedStatement mappedStatement, ParameterHandler parameterHandler, ResultHandler<?> resultHandler, BoundSql boundSql, RowBounds rowBounds)
-
-
Method Detail
-
handleOutputParameters
public void handleOutputParameters(java.sql.CallableStatement cs) throws java.sql.SQLException- Specified by:
handleOutputParametersin interfaceResultSetHandler- Throws:
java.sql.SQLException
-
handleRefCursorOutputParameter
private void handleRefCursorOutputParameter(java.sql.ResultSet rs, ParameterMapping parameterMapping, MetaObject metaParam) throws java.sql.SQLException- Throws:
java.sql.SQLException
-
handleResultSets
public java.util.List<java.lang.Object> handleResultSets(java.sql.Statement stmt) throws java.sql.SQLException- Specified by:
handleResultSetsin interfaceResultSetHandler- Throws:
java.sql.SQLException
-
handleCursorResultSets
public <E> Cursor<E> handleCursorResultSets(java.sql.Statement stmt) throws java.sql.SQLException
- Specified by:
handleCursorResultSetsin interfaceResultSetHandler- Throws:
java.sql.SQLException
-
getFirstResultSet
private ResultSetWrapper getFirstResultSet(java.sql.Statement stmt) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
getNextResultSet
private ResultSetWrapper getNextResultSet(java.sql.Statement stmt)
-
closeResultSet
private void closeResultSet(java.sql.ResultSet rs)
-
cleanUpAfterHandlingResultSet
private void cleanUpAfterHandlingResultSet()
-
validateResultMapsCount
private void validateResultMapsCount(ResultSetWrapper rsw, int resultMapCount)
-
handleResultSet
private void handleResultSet(ResultSetWrapper rsw, ResultMap resultMap, java.util.List<java.lang.Object> multipleResults, ResultMapping parentMapping) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
collapseSingleResultList
private java.util.List<java.lang.Object> collapseSingleResultList(java.util.List<java.lang.Object> multipleResults)
-
handleRowValues
public void handleRowValues(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler<?> resultHandler, RowBounds rowBounds, ResultMapping parentMapping) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
ensureNoRowBounds
private void ensureNoRowBounds()
-
checkResultHandler
protected void checkResultHandler()
-
handleRowValuesForSimpleResultMap
private void handleRowValuesForSimpleResultMap(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler<?> resultHandler, RowBounds rowBounds, ResultMapping parentMapping) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
storeObject
private void storeObject(ResultHandler<?> resultHandler, DefaultResultContext<java.lang.Object> resultContext, java.lang.Object rowValue, ResultMapping parentMapping, java.sql.ResultSet rs) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
callResultHandler
private void callResultHandler(ResultHandler<?> resultHandler, DefaultResultContext<java.lang.Object> resultContext, java.lang.Object rowValue)
-
shouldProcessMoreRows
private boolean shouldProcessMoreRows(ResultContext<?> context, RowBounds rowBounds)
-
skipRows
private void skipRows(java.sql.ResultSet rs, RowBounds rowBounds) throws java.sql.SQLException- Throws:
java.sql.SQLException
-
getRowValue
private java.lang.Object getRowValue(ResultSetWrapper rsw, ResultMap resultMap, java.lang.String columnPrefix) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
getRowValue
private java.lang.Object getRowValue(ResultSetWrapper rsw, ResultMap resultMap, CacheKey combinedKey, java.lang.String columnPrefix, java.lang.Object partialObject) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
putAncestor
private void putAncestor(java.lang.Object resultObject, java.lang.String resultMapId)
-
shouldApplyAutomaticMappings
private boolean shouldApplyAutomaticMappings(ResultMap resultMap, boolean isNested)
-
applyPropertyMappings
private boolean applyPropertyMappings(ResultSetWrapper rsw, ResultMap resultMap, MetaObject metaObject, ResultLoaderMap lazyLoader, java.lang.String columnPrefix) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
getPropertyMappingValue
private java.lang.Object getPropertyMappingValue(java.sql.ResultSet rs, MetaObject metaResultObject, ResultMapping propertyMapping, ResultLoaderMap lazyLoader, java.lang.String columnPrefix) throws java.sql.SQLException- Throws:
java.sql.SQLException
-
createAutomaticMappings
private java.util.List<DefaultResultSetHandler.UnMappedColumnAutoMapping> createAutomaticMappings(ResultSetWrapper rsw, ResultMap resultMap, MetaObject metaObject, java.lang.String columnPrefix) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
applyAutomaticMappings
private boolean applyAutomaticMappings(ResultSetWrapper rsw, ResultMap resultMap, MetaObject metaObject, java.lang.String columnPrefix) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
linkToParents
private void linkToParents(java.sql.ResultSet rs, ResultMapping parentMapping, java.lang.Object rowValue) throws java.sql.SQLException- Throws:
java.sql.SQLException
-
addPendingChildRelation
private void addPendingChildRelation(java.sql.ResultSet rs, MetaObject metaResultObject, ResultMapping parentMapping) throws java.sql.SQLException- Throws:
java.sql.SQLException
-
createKeyForMultipleResults
private CacheKey createKeyForMultipleResults(java.sql.ResultSet rs, ResultMapping resultMapping, java.lang.String names, java.lang.String columns) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
createResultObject
private java.lang.Object createResultObject(ResultSetWrapper rsw, ResultMap resultMap, ResultLoaderMap lazyLoader, java.lang.String columnPrefix) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
createResultObject
private java.lang.Object createResultObject(ResultSetWrapper rsw, ResultMap resultMap, java.util.List<java.lang.Class<?>> constructorArgTypes, java.util.List<java.lang.Object> constructorArgs, java.lang.String columnPrefix) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
createParameterizedResultObject
java.lang.Object createParameterizedResultObject(ResultSetWrapper rsw, java.lang.Class<?> resultType, java.util.List<ResultMapping> constructorMappings, java.util.List<java.lang.Class<?>> constructorArgTypes, java.util.List<java.lang.Object> constructorArgs, java.lang.String columnPrefix)
-
createByConstructorSignature
private java.lang.Object createByConstructorSignature(ResultSetWrapper rsw, java.lang.Class<?> resultType, java.util.List<java.lang.Class<?>> constructorArgTypes, java.util.List<java.lang.Object> constructorArgs) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
createUsingConstructor
private java.lang.Object createUsingConstructor(ResultSetWrapper rsw, java.lang.Class<?> resultType, java.util.List<java.lang.Class<?>> constructorArgTypes, java.util.List<java.lang.Object> constructorArgs, java.lang.reflect.Constructor<?> constructor) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
findDefaultConstructor
private java.lang.reflect.Constructor<?> findDefaultConstructor(java.lang.reflect.Constructor<?>[] constructors)
-
allowedConstructorUsingTypeHandlers
private boolean allowedConstructorUsingTypeHandlers(java.lang.reflect.Constructor<?> constructor, java.util.List<JdbcType> jdbcTypes)
-
createPrimitiveResultObject
private java.lang.Object createPrimitiveResultObject(ResultSetWrapper rsw, ResultMap resultMap, java.lang.String columnPrefix) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
getNestedQueryConstructorValue
private java.lang.Object getNestedQueryConstructorValue(java.sql.ResultSet rs, ResultMapping constructorMapping, java.lang.String columnPrefix) throws java.sql.SQLException- Throws:
java.sql.SQLException
-
getNestedQueryMappingValue
private java.lang.Object getNestedQueryMappingValue(java.sql.ResultSet rs, MetaObject metaResultObject, ResultMapping propertyMapping, ResultLoaderMap lazyLoader, java.lang.String columnPrefix) throws java.sql.SQLException- Throws:
java.sql.SQLException
-
prepareParameterForNestedQuery
private java.lang.Object prepareParameterForNestedQuery(java.sql.ResultSet rs, ResultMapping resultMapping, java.lang.Class<?> parameterType, java.lang.String columnPrefix) throws java.sql.SQLException- Throws:
java.sql.SQLException
-
prepareSimpleKeyParameter
private java.lang.Object prepareSimpleKeyParameter(java.sql.ResultSet rs, ResultMapping resultMapping, java.lang.Class<?> parameterType, java.lang.String columnPrefix) throws java.sql.SQLException- Throws:
java.sql.SQLException
-
prepareCompositeKeyParameter
private java.lang.Object prepareCompositeKeyParameter(java.sql.ResultSet rs, ResultMapping resultMapping, java.lang.Class<?> parameterType, java.lang.String columnPrefix) throws java.sql.SQLException- Throws:
java.sql.SQLException
-
instantiateParameterObject
private java.lang.Object instantiateParameterObject(java.lang.Class<?> parameterType)
-
resolveDiscriminatedResultMap
public ResultMap resolveDiscriminatedResultMap(java.sql.ResultSet rs, ResultMap resultMap, java.lang.String columnPrefix) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
getDiscriminatorValue
private java.lang.Object getDiscriminatorValue(java.sql.ResultSet rs, Discriminator discriminator, java.lang.String columnPrefix) throws java.sql.SQLException- Throws:
java.sql.SQLException
-
prependPrefix
private java.lang.String prependPrefix(java.lang.String columnName, java.lang.String prefix)
-
handleRowValuesForNestedResultMap
private void handleRowValuesForNestedResultMap(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler<?> resultHandler, RowBounds rowBounds, ResultMapping parentMapping) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
applyNestedResultMappings
private boolean applyNestedResultMappings(ResultSetWrapper rsw, ResultMap resultMap, MetaObject metaObject, java.lang.String parentPrefix, CacheKey parentRowKey, boolean newObject)
-
getColumnPrefix
private java.lang.String getColumnPrefix(java.lang.String parentPrefix, ResultMapping resultMapping)
-
anyNotNullColumnHasValue
private boolean anyNotNullColumnHasValue(ResultMapping resultMapping, java.lang.String columnPrefix, ResultSetWrapper rsw) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
getNestedResultMap
private ResultMap getNestedResultMap(java.sql.ResultSet rs, java.lang.String nestedResultMapId, java.lang.String columnPrefix) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
createRowKey
private CacheKey createRowKey(ResultMap resultMap, ResultSetWrapper rsw, java.lang.String columnPrefix) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
getResultMappingsForRowKey
private java.util.List<ResultMapping> getResultMappingsForRowKey(ResultMap resultMap)
-
createRowKeyForMappedProperties
private void createRowKeyForMappedProperties(ResultMap resultMap, ResultSetWrapper rsw, CacheKey cacheKey, java.util.List<ResultMapping> resultMappings, java.lang.String columnPrefix) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
createRowKeyForUnmappedProperties
private void createRowKeyForUnmappedProperties(ResultMap resultMap, ResultSetWrapper rsw, CacheKey cacheKey, java.lang.String columnPrefix) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
createRowKeyForMap
private void createRowKeyForMap(ResultSetWrapper rsw, CacheKey cacheKey) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
linkObjects
private void linkObjects(MetaObject metaObject, ResultMapping resultMapping, java.lang.Object rowValue)
-
instantiateCollectionPropertyIfAppropriate
private java.lang.Object instantiateCollectionPropertyIfAppropriate(ResultMapping resultMapping, MetaObject metaObject)
-
hasTypeHandlerForResultObject
private boolean hasTypeHandlerForResultObject(ResultSetWrapper rsw, java.lang.Class<?> resultType)
-
-