Browse Source

Polishing.

Simplify TypeInformation creation from a MethodParameter.

Original pull request: #1356
See #1343
pull/1453/head
Mark Paluch 3 years ago
parent
commit
09189a4c41
No known key found for this signature in database
GPG Key ID: 4406B84C1661DCD1
  1. 21
      spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQuery.java
  2. 10
      spring-data-relational/src/main/java/org/springframework/data/relational/repository/query/RelationalParameters.java

21
spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQuery.java

@ -25,7 +25,6 @@ import java.util.List; @@ -25,7 +25,6 @@ import java.util.List;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.core.ResolvableType;
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.jdbc.core.convert.JdbcColumnTypes;
import org.springframework.data.jdbc.core.convert.JdbcConverter;
@ -41,6 +40,7 @@ import org.springframework.data.repository.query.QueryMethodEvaluationContextPro @@ -41,6 +40,7 @@ import org.springframework.data.repository.query.QueryMethodEvaluationContextPro
import org.springframework.data.repository.query.ResultProcessor;
import org.springframework.data.repository.query.SpelEvaluator;
import org.springframework.data.repository.query.SpelQueryContext;
import org.springframework.data.util.TypeInformation;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
@ -185,23 +185,18 @@ public class StringBasedJdbcQuery extends AbstractJdbcQuery { @@ -185,23 +185,18 @@ public class StringBasedJdbcQuery extends AbstractJdbcQuery {
String parameterName = p.getName().orElseThrow(() -> new IllegalStateException(PARAMETER_NEEDS_TO_BE_NAMED));
RelationalParameters.RelationalParameter parameter = getQueryMethod().getParameters().getParameter(p.getIndex());
ResolvableType resolvableType = parameter.getResolvableType();
Class<?> type = resolvableType.resolve();
Assert.notNull(type, "@Query parameter type could not be resolved");
TypeInformation<?> typeInformation = parameter.getTypeInformation();
JdbcValue jdbcValue;
if (value instanceof Collection && resolvableType.hasGenerics()) {
if (typeInformation.isCollectionLike() && value instanceof Collection<?>) {
List<Object> mapped = new ArrayList<>();
SQLType jdbcType = null;
Class<?> elementType = resolvableType.getGeneric(0).resolve();
Assert.notNull(elementType, "@Query Iterable parameter generic type could not be resolved");
TypeInformation<?> actualType = typeInformation.getRequiredActualType();
for (Object o : (Iterable<?>) value) {
JdbcValue elementJdbcValue = converter.writeJdbcValue(o, elementType,
JdbcUtil.targetSqlTypeFor(JdbcColumnTypes.INSTANCE.resolvePrimitiveType(elementType)));
JdbcValue elementJdbcValue = converter.writeJdbcValue(o, actualType.getType(),
JdbcUtil.targetSqlTypeFor(JdbcColumnTypes.INSTANCE.resolvePrimitiveType(actualType.getType())));
if (jdbcType == null) {
jdbcType = elementJdbcValue.getJdbcType();
}
@ -211,8 +206,8 @@ public class StringBasedJdbcQuery extends AbstractJdbcQuery { @@ -211,8 +206,8 @@ public class StringBasedJdbcQuery extends AbstractJdbcQuery {
jdbcValue = JdbcValue.of(mapped, jdbcType);
} else {
jdbcValue = converter.writeJdbcValue(value, type,
JdbcUtil.targetSqlTypeFor(JdbcColumnTypes.INSTANCE.resolvePrimitiveType(type)));
jdbcValue = converter.writeJdbcValue(value, typeInformation.getType(),
JdbcUtil.targetSqlTypeFor(JdbcColumnTypes.INSTANCE.resolvePrimitiveType(typeInformation.getType())));
}
SQLType jdbcType = jdbcValue.getJdbcType();

10
spring-data-relational/src/main/java/org/springframework/data/relational/repository/query/RelationalParameters.java

@ -16,7 +16,6 @@ @@ -16,7 +16,6 @@
package org.springframework.data.relational.repository.query;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.List;
import org.springframework.core.MethodParameter;
@ -24,6 +23,7 @@ import org.springframework.core.ResolvableType; @@ -24,6 +23,7 @@ import org.springframework.core.ResolvableType;
import org.springframework.data.relational.repository.query.RelationalParameters.RelationalParameter;
import org.springframework.data.repository.query.Parameter;
import org.springframework.data.repository.query.Parameters;
import org.springframework.data.util.TypeInformation;
/**
* Custom extension of {@link Parameters}.
@ -75,10 +75,12 @@ public class RelationalParameters extends Parameters<RelationalParameters, Relat @@ -75,10 +75,12 @@ public class RelationalParameters extends Parameters<RelationalParameters, Relat
this.parameter = parameter;
}
public ResolvableType getResolvableType() {
return ResolvableType
.forClassWithGenerics(super.getType(), ResolvableType.forMethodParameter(this.parameter).getGenerics());
return getTypeInformation().toTypeDescriptor().getResolvableType();
}
public TypeInformation<?> getTypeInformation() {
return TypeInformation.fromMethodParameter(parameter);
}
}
}

Loading…
Cancel
Save