DATAJDBC-102 - Polishing.

Pull entity instantiation into a single method.

Original pull request: #68.
This commit is contained in:
Mark Paluch
2018-06-04 16:11:33 +02:00
parent b91da91a83
commit b9c6b8b943

View File

@@ -41,6 +41,7 @@ import org.springframework.jdbc.core.RowMapper;
*
* @author Jens Schauder
* @author Oliver Gierke
* @author Mark Paluch
* @since 1.0
*/
public class EntityRowMapper<T> implements RowMapper<T> {
@@ -63,8 +64,7 @@ public class EntityRowMapper<T> implements RowMapper<T> {
this.context = context;
this.instantiators = instantiators;
this.accessStrategy = accessStrategy;
idProperty = entity.getIdProperty();
this.idProperty = entity.getIdProperty();
}
/*
@@ -74,7 +74,7 @@ public class EntityRowMapper<T> implements RowMapper<T> {
@Override
public T mapRow(ResultSet resultSet, int rowNumber) throws SQLException {
T result = createInstance(resultSet);
T result = createInstance(entity, resultSet, "");
ConvertingPropertyAccessor propertyAccessor = new ConvertingPropertyAccessor(entity.getPropertyAccessor(result),
conversions);
@@ -97,12 +97,6 @@ public class EntityRowMapper<T> implements RowMapper<T> {
return result;
}
private T createInstance(ResultSet rs) {
return instantiators.getInstantiatorFor(entity) //
.createInstance(entity, new ResultSetParameterValueProvider(rs, entity, conversions, ""));
}
/**
* Read a single value or a complete Entity from the {@link ResultSet} passed as an argument.
*
@@ -138,8 +132,8 @@ public class EntityRowMapper<T> implements RowMapper<T> {
return null;
}
S instance = instantiators.getInstantiatorFor(entity) //
.createInstance(entity, new ResultSetParameterValueProvider(rs, entity, conversions, prefix));
S instance =
createInstance(entity, rs, prefix);
PersistentPropertyAccessor accessor = entity.getPropertyAccessor(instance);
ConvertingPropertyAccessor propertyAccessor = new ConvertingPropertyAccessor(accessor, conversions);
@@ -151,6 +145,12 @@ public class EntityRowMapper<T> implements RowMapper<T> {
return instance;
}
private <S> S createInstance(JdbcPersistentEntity<S> entity, ResultSet rs, String prefix) {
return instantiators.getInstantiatorFor(entity) //
.createInstance(entity, new ResultSetParameterValueProvider(rs, entity, conversions, prefix));
}
@RequiredArgsConstructor
private static class ResultSetParameterValueProvider implements ParameterValueProvider<JdbcPersistentProperty> {