From 3d4847a552ef9d72931cbbd6fae2e64684fd5c12 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Mon, 14 Dec 2020 16:16:34 +0100 Subject: [PATCH] DATAJDBC-620 - The default RowMapper now gets passed to ResultSetConstructor. Original pull request: #256. --- .../query/StringBasedJdbcQuery.java | 2 +- ...yMappingConfigurationIntegrationTests.java | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQuery.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQuery.java index 384db28f..243f36dd 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQuery.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQuery.java @@ -77,7 +77,7 @@ public class StringBasedJdbcQuery extends AbstractJdbcQuery { RowMapper rowMapper = determineRowMapper(defaultRowMapper); return getQueryExecution( // queryMethod, // - determineResultSetExtractor(rowMapper != defaultRowMapper ? rowMapper : null), // + determineResultSetExtractor(rowMapper), // rowMapper // );}); } diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/StringBasedJdbcQueryMappingConfigurationIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/StringBasedJdbcQueryMappingConfigurationIntegrationTests.java index 988a5193..f5d0645c 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/StringBasedJdbcQueryMappingConfigurationIntegrationTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/StringBasedJdbcQueryMappingConfigurationIntegrationTests.java @@ -34,6 +34,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.dao.DataAccessException; import org.springframework.data.annotation.Id; +import org.springframework.data.jdbc.core.convert.EntityRowMapper; import org.springframework.data.jdbc.repository.config.DefaultQueryMappingConfiguration; import org.springframework.data.jdbc.repository.config.EnableJdbcRepositories; import org.springframework.data.jdbc.repository.query.Query; @@ -134,6 +135,20 @@ public class StringBasedJdbcQueryMappingConfigurationIntegrationTests { } } + public static class RowMapperResultSetExtractor implements ResultSetExtractor { + + final RowMapper rowMapper; + + public RowMapperResultSetExtractor(RowMapper rowMapper) { + this.rowMapper = rowMapper; + } + + @Override + public RowMapper extractData(ResultSet rs) throws SQLException, DataAccessException { + return rowMapper; + } + } + interface CarRepository extends CrudRepository { @Query(value = "select * from car", resultSetExtractorClass = CarResultSetExtractor.class) @@ -144,6 +159,11 @@ public class StringBasedJdbcQueryMappingConfigurationIntegrationTests { @Query(value = "select model from car", rowMapperRef = "CustomRowMapperBean") List findByNameWithRowMapperBean(); + + + @Query(value = "select * from car", resultSetExtractorClass = RowMapperResultSetExtractor.class) + RowMapper customFindAllWithRowMapper(); + } @Autowired NamedParameterJdbcTemplate template; @@ -179,4 +199,13 @@ public class StringBasedJdbcQueryMappingConfigurationIntegrationTests { assertThat(cars).allMatch(car -> VALUE_PROCESSED_BY_SERVICE.equals(car.getModel())); } + @Test // DATAJDBC-620 + void defaultRowMapperGetsInjectedIntoCustomResultSetExtractor() { + + RowMapper rowMapper = carRepository.customFindAllWithRowMapper(); + + assertThat(rowMapper).isNotNull(); + } + + }