Top Description Fields Constructors Methods
org.springframework.r2dbc.core

public Class BeanPropertyRowMapper<T>

extends Object
implements Function<Readable, T>
Class Inheritance
All Implemented Interfaces
java.util.function.Function
Known Direct Subclasses
org.springframework.r2dbc.core.DataClassRowMapper
Type Parameters
<T>
the result type
Imports
java.beans.PropertyDescriptor, java.util.HashMap, .List, .Locale, .Map, java.util.function.Function, io.r2dbc.spi.OutParameters, .OutParametersMetadata, .Readable, .ReadableMetadata, .Row, .RowMetadata, org.springframework.beans.BeanUtils, .BeanWrapperImpl, .TypeConverter, org.springframework.core.convert.ConversionService, org.springframework.core.convert.support.DefaultConversionService, org.springframework.lang.Nullable, org.springframework.util.Assert, .StringUtils

Mapping Function implementation that converts an R2DBC Readable (a Row or OutParameters) into a new instance of the specified mapped target class. The mapped target class must be a top-level class or static nested class, and it must have a default or no-arg constructor.

Readable component values are mapped based on matching the column name (as obtained from R2DBC meta-data) to public setters in the target class for the corresponding properties. The names are matched either directly or by transforming a name separating the parts with underscores to the same name using "camel" case.

Mapping is provided for properties in the target class for many common types — for example: String, boolean, Boolean, byte, Byte, short, Short, int, Integer, long, Long, float, Float, double, Double, BigDecimal, java.util.Date, etc.

To facilitate mapping between columns and properties that don't have matching names, try using column aliases in the SQL statement like "select fname as first_name from customer", where first_name can be mapped to a setFirstName(String) method in the target class.

If you need to map to a target class which has a data class constructor — for example, a Java record or a Kotlin data class — use DataClassRowMapper instead.

Please note that this class is designed to provide convenience rather than high performance. For best performance, consider using a custom mapping function implementation.

Authors
Simon Baslé, Juergen Hoeller, Sam Brannen
Since
6.1
See Also
DataClassRowMapper

Field Summary

Modifier and TypeField and Description
private final ConversionService
conversionService

ConversionService for binding result values to bean properties.

private final Class<T>
mappedClass

The class we are mapping to.

private final Map<String, PropertyDescriptor>
mappedProperties

Map of the properties we provide mapping for.

Constructor Summary

AccessConstructor and Description
public
BeanPropertyRowMapper(Class<T>
the class that each row should be mapped to
mappedClass
)

Create a new BeanPropertyRowMapper.

public
BeanPropertyRowMapper(Class<T>
the class that each row should be mapped to
mappedClass
,
ConversionService
a ConversionService for binding result values to bean properties
conversionService
)

Create a new BeanPropertyRowMapper.

Method Summary

Modifier and TypeMethod and Description
public T
apply(Readable
the function argument
readable
)

Implements java.util.function.Function.apply.

Extract the values for the current Readable: all columns in case of a Row or all parameters in case of an OutParameters.

protected T

Returns:

a corresponding instance of the mapped class
constructMappedInstance
(Readable
the Readable being mapped (a Row or OutParameters)
readable
,
List<? extends ReadableMetadata>
the list of item ReadableMetadata (either ColumnMetadata or OutParameterMetadata)
itemMetadatas
,
TypeConverter
a TypeConverter with this row mapper's conversion service
tc
)

Construct an instance of the mapped class for the current Readable.

protected Object

Returns:

the Object value
getItemValue
(Readable
is the Row or OutParameters holding the data
readable
,
int
is the column index or out-parameter index
itemIndex
,
Class<?>
the target parameter type
paramType
)

Retrieve an R2DBC object value for the specified item index (a column or an out-parameter).

protected String

Returns:

the converted name
lowerCaseName
(String
the original name
name
)

Convert the given name to lower case.

private <R extends Readable> T
mapForReadable(R readable, List<? extends ReadableMetadata> readableMetadatas)

protected void
suppressProperty(String
the property name (as used by property descriptors)
propertyName
)

Remove the specified property from the mapped properties.

protected String

Returns:

the converted name
underscoreName
(String
the original name
name
)

Convert a name in camelCase to an underscored name in lower case.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

conversionServiceback to summary
private final ConversionService conversionService

ConversionService for binding result values to bean properties.

mappedClassback to summary
private final Class<T> mappedClass

The class we are mapping to.

mappedPropertiesback to summary
private final Map<String, PropertyDescriptor> mappedProperties

Map of the properties we provide mapping for.

Constructor Detail

BeanPropertyRowMapperback to summary
public BeanPropertyRowMapper(Class<T> mappedClass)

Create a new BeanPropertyRowMapper.

Parameters
mappedClass:Class<T>

the class that each row should be mapped to

BeanPropertyRowMapperback to summary
public BeanPropertyRowMapper(Class<T> mappedClass, ConversionService conversionService)

Create a new BeanPropertyRowMapper.

Parameters
mappedClass:Class<T>

the class that each row should be mapped to

conversionService:ConversionService

a ConversionService for binding result values to bean properties

Method Detail

applyback to summary
public T apply(Readable readable)

Implements java.util.function.Function.apply.

Extract the values for the current Readable: all columns in case of a Row or all parameters in case of an OutParameters.

Utilizes public setters and derives meta-data from the concrete type.

Parameters
readable:Readable

Doc from java.util.function.Function.apply.

the function argument

Returns:T

Doc from java.util.function.Function.apply.

the function result

Annotations
@Override
Exceptions
IllegalArgumentException:
in case the concrete type is neither Row nor OutParameters
See Also
RowMetadata, OutParametersMetadata
constructMappedInstanceback to summary
protected T constructMappedInstance(Readable readable, List<? extends ReadableMetadata> itemMetadatas, TypeConverter tc)

Construct an instance of the mapped class for the current Readable.

The default implementation simply instantiates the mapped class. Can be overridden in subclasses.

Parameters
readable:Readable

the Readable being mapped (a Row or OutParameters)

itemMetadatas:List<? extends ReadableMetadata>

the list of item ReadableMetadata (either ColumnMetadata or OutParameterMetadata)

tc:TypeConverter

a TypeConverter with this row mapper's conversion service

Returns:T

a corresponding instance of the mapped class

getItemValueback to summary
protected Object getItemValue(Readable readable, int itemIndex, Class<?> paramType)

Retrieve an R2DBC object value for the specified item index (a column or an out-parameter).

The default implementation calls Readable#get(int, Class) then falls back to Readable#get(int) in case of an exception. Subclasses may override this to check specific value types upfront, or to post-process values returned from get.

Parameters
readable:Readable

is the Row or OutParameters holding the data

itemIndex:int

is the column index or out-parameter index

paramType:Class<?>

the target parameter type

Returns:Object

the Object value

Annotations
@Nullable
See Also
Readable#get(int, Class), Readable#get(int)
lowerCaseNameback to summary
protected String lowerCaseName(String name)

Convert the given name to lower case.

By default, conversions will happen within the US locale.

Parameters
name:String

the original name

Returns:String

the converted name

mapForReadableback to summary
private <R extends Readable> T mapForReadable(R readable, List<? extends ReadableMetadata> readableMetadatas)
suppressPropertyback to summary
protected void suppressProperty(String propertyName)

Remove the specified property from the mapped properties.

Parameters
propertyName:String

the property name (as used by property descriptors)

underscoreNameback to summary
protected String underscoreName(String name)

Convert a name in camelCase to an underscored name in lower case.

Any upper case letters are converted to lower case with a preceding underscore.

Parameters
name:String

the original name

Returns:String

the converted name

See Also
lowerCaseName