Skip to content

Commit 2c5489b

Browse files
mp911deschauder
authored andcommitted
DATAJDBC-235 - Incorporate feedback from review.
Refactor ResultSetParameterValueProvider into Function<Parameter, Object>. Remove unnecessary assertions.
1 parent fb858bf commit 2c5489b

File tree

5 files changed

+15
-44
lines changed

5 files changed

+15
-44
lines changed

src/main/java/org/springframework/data/jdbc/core/EntityRowMapper.java

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515
*/
1616
package org.springframework.data.jdbc.core;
1717

18-
import lombok.NonNull;
19-
import lombok.RequiredArgsConstructor;
20-
2118
import java.sql.ResultSet;
2219
import java.sql.SQLException;
2320
import java.util.Map;
@@ -26,8 +23,6 @@
2623
import org.springframework.data.mapping.MappingException;
2724
import org.springframework.data.mapping.PersistentProperty;
2825
import org.springframework.data.mapping.PersistentPropertyAccessor;
29-
import org.springframework.data.mapping.PreferredConstructor.Parameter;
30-
import org.springframework.data.mapping.model.ParameterValueProvider;
3126
import org.springframework.data.relational.core.conversion.RelationalConverter;
3227
import org.springframework.data.relational.core.mapping.RelationalMappingContext;
3328
import org.springframework.data.relational.core.mapping.RelationalPersistentEntity;
@@ -144,33 +139,18 @@ private <S> S readEntityFrom(ResultSet rs, PersistentProperty<?> property) {
144139
}
145140

146141
private <S> S createInstance(RelationalPersistentEntity<S> entity, ResultSet rs, String prefix) {
147-
return converter.createInstance(entity, new ResultSetParameterValueProvider(rs, entity, prefix));
148-
}
149-
150-
@RequiredArgsConstructor
151-
private static class ResultSetParameterValueProvider implements ParameterValueProvider<RelationalPersistentProperty> {
152142

153-
@NonNull private final ResultSet resultSet;
154-
@NonNull private final RelationalPersistentEntity<?> entity;
155-
@NonNull private final String prefix;
156-
157-
/*
158-
* (non-Javadoc)
159-
* @see org.springframework.data.mapping.model.ParameterValueProvider#getParameterValue(org.springframework.data.mapping.PreferredConstructor.Parameter)
160-
*/
161-
@SuppressWarnings("unchecked")
162-
@Override
163-
public <T> T getParameterValue(Parameter<T, RelationalPersistentProperty> parameter) {
143+
return converter.createInstance(entity, parameter -> {
164144

165145
String parameterName = parameter.getName();
166146
Assert.notNull(parameterName, "A constructor parameter name must not be null to be used with Spring Data JDBC");
167147
String column = prefix + entity.getRequiredPersistentProperty(parameterName).getColumnName();
168148

169149
try {
170-
return (T) resultSet.getObject(column);
150+
return rs.getObject(column);
171151
} catch (SQLException o_O) {
172152
throw new MappingException(String.format("Couldn't read column %s from ResultSet.", column), o_O);
173153
}
174-
}
154+
});
175155
}
176156
}

src/main/java/org/springframework/data/relational/core/conversion/BasicRelationalConverter.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import java.util.Collections;
2121
import java.util.Optional;
22+
import java.util.function.Function;
2223

2324
import org.springframework.core.convert.ConversionService;
2425
import org.springframework.core.convert.support.ConfigurableConversionService;
@@ -130,11 +131,11 @@ public <T> PersistentPropertyAccessor<T> getPropertyAccessor(PersistentEntity<T,
130131

131132
/*
132133
* (non-Javadoc)
133-
* @see org.springframework.data.relational.core.conversion.RelationalConverter#createInstance(org.springframework.data.mapping.PersistentEntity, org.springframework.data.mapping.model.ParameterValueProvider)
134+
* @see org.springframework.data.relational.core.conversion.RelationalConverter#createInstance(org.springframework.data.mapping.PersistentEntity, java.util.function.Function)
134135
*/
135136
@Override
136137
public <T> T createInstance(PersistentEntity<T, RelationalPersistentProperty> entity,
137-
ParameterValueProvider<RelationalPersistentProperty> parameterValueProvider) {
138+
Function<Parameter<?, RelationalPersistentProperty>, Object> parameterValueProvider) {
138139

139140
return entityInstantiators.getInstantiatorFor(entity) //
140141
.createInstance(entity, new ConvertingParameterValueProvider<>(parameterValueProvider));
@@ -154,9 +155,9 @@ public Object readValue(@Nullable Object value, TypeInformation<?> type) {
154155

155156
if (conversions.hasCustomReadTarget(value.getClass(), type.getType())) {
156157
return conversionService.convert(value, type.getType());
157-
} else {
158-
return getPotentiallyConvertedSimpleRead(value, type.getType());
159158
}
159+
160+
return getPotentiallyConvertedSimpleRead(value, type.getType());
160161
}
161162

162163
/*
@@ -221,10 +222,6 @@ private Object getPotentiallyConvertedSimpleRead(@Nullable Object value, @Nullab
221222
return value;
222223
}
223224

224-
if (conversions.hasCustomReadTarget(value.getClass(), target)) {
225-
return conversionService.convert(value, target);
226-
}
227-
228225
if (Enum.class.isAssignableFrom(target)) {
229226
return Enum.valueOf((Class<Enum>) target, value.toString());
230227
}
@@ -241,7 +238,7 @@ private Object getPotentiallyConvertedSimpleRead(@Nullable Object value, @Nullab
241238
@RequiredArgsConstructor
242239
class ConvertingParameterValueProvider<P extends PersistentProperty<P>> implements ParameterValueProvider<P> {
243240

244-
private final ParameterValueProvider<P> delegate;
241+
private final Function<Parameter<?, P>, Object> delegate;
245242

246243
/*
247244
* (non-Javadoc)
@@ -250,7 +247,7 @@ class ConvertingParameterValueProvider<P extends PersistentProperty<P>> implemen
250247
@Override
251248
@SuppressWarnings("unchecked")
252249
public <T> T getParameterValue(Parameter<T, P> parameter) {
253-
return (T) readValue(delegate.getParameterValue(parameter), parameter.getType());
250+
return (T) readValue(delegate.apply(parameter), parameter.getType());
254251
}
255252
}
256253
}

src/main/java/org/springframework/data/relational/core/conversion/RelationalConverter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,12 @@
1515
*/
1616
package org.springframework.data.relational.core.conversion;
1717

18+
import java.util.function.Function;
19+
1820
import org.springframework.core.convert.ConversionService;
1921
import org.springframework.data.mapping.PersistentEntity;
2022
import org.springframework.data.mapping.PersistentPropertyAccessor;
23+
import org.springframework.data.mapping.PreferredConstructor.Parameter;
2124
import org.springframework.data.mapping.context.MappingContext;
2225
import org.springframework.data.mapping.model.ParameterValueProvider;
2326
import org.springframework.data.relational.core.mapping.RelationalPersistentEntity;
@@ -57,7 +60,7 @@ public interface RelationalConverter {
5760
* @return
5861
*/
5962
<T> T createInstance(PersistentEntity<T, RelationalPersistentProperty> entity,
60-
ParameterValueProvider<RelationalPersistentProperty> parameterValueProvider);
63+
Function<Parameter<?, RelationalPersistentProperty>, Object> parameterValueProvider);
6164

6265
/**
6366
* Return a {@link PersistentPropertyAccessor} to access property values of the {@code instance}.

src/test/java/org/springframework/data/jdbc/core/DefaultDataAccessStrategyUnitTests.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,6 @@ public void considersConfiguredWriteConverter() {
111111

112112
verify(jdbcOperations).update(sqlCaptor.capture(), paramSourceCaptor.capture(), any(KeyHolder.class));
113113

114-
assertThat(sqlCaptor.getValue()) //
115-
.contains("INSERT INTO entity_with_boolean (flag, id) VALUES (:flag, :id)");
116114
assertThat(paramSourceCaptor.getValue().getValue("id")).isEqualTo(ORIGINAL_ID);
117115
assertThat(paramSourceCaptor.getValue().getValue("flag")).isEqualTo("T");
118116
}

src/test/java/org/springframework/data/relational/core/conversion/BasicRelationalConverterUnitTests.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222

2323
import org.junit.Test;
2424
import org.springframework.data.mapping.PersistentPropertyAccessor;
25-
import org.springframework.data.mapping.PreferredConstructor.Parameter;
26-
import org.springframework.data.mapping.model.ParameterValueProvider;
2725
import org.springframework.data.relational.core.mapping.RelationalMappingContext;
2826
import org.springframework.data.relational.core.mapping.RelationalPersistentEntity;
2927
import org.springframework.data.relational.core.mapping.RelationalPersistentProperty;
@@ -78,12 +76,7 @@ public void shouldCreateInstance() {
7876
RelationalPersistentEntity<MyValue> entity = (RelationalPersistentEntity) context
7977
.getRequiredPersistentEntity(MyValue.class);
8078

81-
MyValue result = converter.createInstance(entity, new ParameterValueProvider<RelationalPersistentProperty>() {
82-
@Override
83-
public <T> T getParameterValue(Parameter<T, RelationalPersistentProperty> parameter) {
84-
return (T) "bar";
85-
}
86-
});
79+
MyValue result = converter.createInstance(entity, it -> "bar");
8780

8881
assertThat(result.getFoo()).isEqualTo("bar");
8982
}

0 commit comments

Comments
 (0)