From 563f8bb0a88878c6a9c822fb57e9ea85d4321ea3 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Wed, 14 May 2025 17:05:27 +0200 Subject: [PATCH] Polishing. Formatting. Original pull request #1893 See #1006 --- .../convert/DataAccessStrategyFactory.java | 3 - .../convert/DefaultDataAccessStrategy.java | 2 +- .../convert/QueryMappingConfiguration.java | 17 ++- .../mybatis/MyBatisDataAccessStrategy.java | 5 +- .../config/AbstractJdbcConfiguration.java | 8 +- .../config/MyBatisJdbcConfiguration.java | 5 +- .../BeanFactoryAwareRowMapperFactory.java | 59 ++++---- .../support/JdbcRepositoryFactory.java | 3 +- .../support/JdbcRepositoryFactoryBean.java | 2 +- .../data/jdbc/DependencyTests.java | 4 +- .../DefaultDataAccessStrategyUnitTests.java | 5 +- .../mybatis/MyBatisHsqlIntegrationTests.java | 8 +- ...yMappingConfigurationIntegrationTests.java | 129 +++++++++--------- .../SimpleJdbcRepositoryEventsUnitTests.java | 15 +- ...yMappingConfigurationIntegrationTests.java | 2 +- ...nableJdbcRepositoriesIntegrationTests.java | 6 +- .../JdbcQueryLookupStrategyUnitTests.java | 9 +- .../JdbcRepositoryFactoryBeanUnitTests.java | 2 +- .../data/jdbc/testing/TestConfiguration.java | 27 ++-- ...ppingConfigurationIntegrationTests-db2.sql | 6 +- ...appingConfigurationIntegrationTests-h2.sql | 6 +- ...pingConfigurationIntegrationTests-hsql.sql | 6 +- ...gConfigurationIntegrationTests-mariadb.sql | 7 +- ...ingConfigurationIntegrationTests-mssql.sql | 6 +- ...ingConfigurationIntegrationTests-mysql.sql | 7 +- ...ngConfigurationIntegrationTests-oracle.sql | 6 +- ...ConfigurationIntegrationTests-postgres.sql | 6 +- 27 files changed, 193 insertions(+), 168 deletions(-) diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/DataAccessStrategyFactory.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/DataAccessStrategyFactory.java index 7c503253..5a0c6b40 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/DataAccessStrategyFactory.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/DataAccessStrategyFactory.java @@ -15,10 +15,7 @@ */ package org.springframework.data.jdbc.core.convert; -import java.util.Optional; - import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; -import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategy.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategy.java index ad9f314c..ff0b67f4 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategy.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategy.java @@ -73,7 +73,6 @@ public class DefaultDataAccessStrategy implements DataAccessStrategy { private final NamedParameterJdbcOperations operations; private final SqlParametersFactory sqlParametersFactory; private final InsertStrategyFactory insertStrategyFactory; - private final QueryMappingConfiguration queryMappingConfiguration; /** @@ -451,6 +450,7 @@ public class DefaultDataAccessStrategy implements DataAccessStrategy { } private RowMapper getRowMapper(Class domainType) { + RowMapper targetRowMapper; if ((targetRowMapper = queryMappingConfiguration.getRowMapper(domainType)) != null) { diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/QueryMappingConfiguration.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/QueryMappingConfiguration.java index c750198c..91becb7f 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/QueryMappingConfiguration.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/QueryMappingConfiguration.java @@ -1,3 +1,18 @@ +/* + * Copyright 2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.springframework.data.jdbc.core.convert; import org.springframework.jdbc.core.RowMapper; @@ -9,7 +24,7 @@ import org.springframework.lang.Nullable; * * @author Jens Schauder * @author Evgeni Dimitrov - * @since 1.1 + * @since 4.0 */ public interface QueryMappingConfiguration { diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/mybatis/MyBatisDataAccessStrategy.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/mybatis/MyBatisDataAccessStrategy.java index 8413d8a1..3eba6937 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/mybatis/MyBatisDataAccessStrategy.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/mybatis/MyBatisDataAccessStrategy.java @@ -32,7 +32,6 @@ import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.jdbc.core.convert.*; -import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration; import org.springframework.data.mapping.PersistentPropertyPath; import org.springframework.data.mapping.PropertyPath; import org.springframework.data.relational.core.conversion.IdValueSource; @@ -77,8 +76,8 @@ public class MyBatisDataAccessStrategy implements DataAccessStrategy { * uses a {@link DefaultDataAccessStrategy} */ public static DataAccessStrategy createCombinedAccessStrategy(RelationalMappingContext context, - JdbcConverter converter, NamedParameterJdbcOperations operations, SqlSession sqlSession, - Dialect dialect, QueryMappingConfiguration queryMappingConfiguration) { + JdbcConverter converter, NamedParameterJdbcOperations operations, SqlSession sqlSession, Dialect dialect, + QueryMappingConfiguration queryMappingConfiguration) { return createCombinedAccessStrategy(context, converter, operations, sqlSession, NamespaceStrategy.DEFAULT_INSTANCE, dialect, queryMappingConfiguration); } diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration.java index e82bc366..8b5f3051 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration.java @@ -25,7 +25,6 @@ import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.ApplicationContext; @@ -42,7 +41,6 @@ import org.springframework.data.jdbc.core.dialect.JdbcArrayColumns; import org.springframework.data.jdbc.core.dialect.JdbcDialect; import org.springframework.data.jdbc.core.mapping.JdbcMappingContext; import org.springframework.data.jdbc.core.mapping.JdbcSimpleTypes; -import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration; import org.springframework.data.mapping.model.SimpleTypeHolder; import org.springframework.data.relational.RelationalManagedTypes; import org.springframework.data.relational.core.conversion.RelationalConverter; @@ -229,8 +227,7 @@ public class AbstractJdbcConfiguration implements ApplicationContextAware { SqlGeneratorSource sqlGeneratorSource = new SqlGeneratorSource(context, jdbcConverter, dialect); DataAccessStrategyFactory factory = new DataAccessStrategyFactory(sqlGeneratorSource, jdbcConverter, operations, new SqlParametersFactory(context, jdbcConverter), new InsertStrategyFactory(operations, dialect), - this.queryMappingConfiguration - ); + this.queryMappingConfiguration); return factory.create(); } @@ -254,7 +251,8 @@ public class AbstractJdbcConfiguration implements ApplicationContextAware { this.applicationContext = applicationContext; } - public void setQueryMappingConfiguration(Optional queryMappingConfiguration) throws BeansException { + public void setQueryMappingConfiguration(Optional queryMappingConfiguration) + throws BeansException { this.queryMappingConfiguration = queryMappingConfiguration.orElse(QueryMappingConfiguration.EMPTY); } diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/MyBatisJdbcConfiguration.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/MyBatisJdbcConfiguration.java index de81c860..6198fab5 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/MyBatisJdbcConfiguration.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/MyBatisJdbcConfiguration.java @@ -23,9 +23,9 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.jdbc.core.convert.DataAccessStrategy; import org.springframework.data.jdbc.core.convert.JdbcConverter; +import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration; import org.springframework.data.jdbc.core.mapping.JdbcMappingContext; import org.springframework.data.jdbc.mybatis.MyBatisDataAccessStrategy; -import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration; import org.springframework.data.relational.core.dialect.Dialect; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; @@ -48,6 +48,7 @@ public class MyBatisJdbcConfiguration extends AbstractJdbcConfiguration { public DataAccessStrategy dataAccessStrategyBean(NamedParameterJdbcOperations operations, JdbcConverter jdbcConverter, JdbcMappingContext context, Dialect dialect) { - return MyBatisDataAccessStrategy.createCombinedAccessStrategy(context, jdbcConverter, operations, session, dialect, queryMappingConfiguration.orElse(QueryMappingConfiguration.EMPTY)); + return MyBatisDataAccessStrategy.createCombinedAccessStrategy(context, jdbcConverter, operations, session, dialect, + queryMappingConfiguration.orElse(QueryMappingConfiguration.EMPTY)); } } diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/BeanFactoryAwareRowMapperFactory.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/BeanFactoryAwareRowMapperFactory.java index e528ef63..d0ff604a 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/BeanFactoryAwareRowMapperFactory.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/BeanFactoryAwareRowMapperFactory.java @@ -28,9 +28,8 @@ import org.springframework.jdbc.core.RowMapper; import org.springframework.lang.Nullable; /** - * This {@link RowMapperFactory} implementation extends the {@link DefaultRowMapperFactory} - * by adding the capabilities to load {@link RowMapper} or {@link ResultSetExtractor} beans by - * their names in {@link BeanFactory}. + * This {@link RowMapperFactory} implementation extends the {@link DefaultRowMapperFactory} by adding the capabilities + * to load {@link RowMapper} or {@link ResultSetExtractor} beans by their names in {@link BeanFactory}. * * @author Mark Paluch * @author Jens Schauder @@ -39,38 +38,36 @@ import org.springframework.lang.Nullable; @SuppressWarnings("unchecked") public class BeanFactoryAwareRowMapperFactory extends DefaultRowMapperFactory { - private final @Nullable BeanFactory beanFactory; + private final @Nullable BeanFactory beanFactory; - public BeanFactoryAwareRowMapperFactory( - RelationalMappingContext context, - JdbcConverter converter, - QueryMappingConfiguration queryMappingConfiguration, - EntityCallbacks entityCallbacks, - ApplicationEventPublisher publisher, - @Nullable BeanFactory beanFactory - ) { - super(context, converter, queryMappingConfiguration, entityCallbacks, publisher); + public BeanFactoryAwareRowMapperFactory(RelationalMappingContext context, JdbcConverter converter, + QueryMappingConfiguration queryMappingConfiguration, EntityCallbacks entityCallbacks, + ApplicationEventPublisher publisher, @Nullable BeanFactory beanFactory) { - this.beanFactory = beanFactory; - } + super(context, converter, queryMappingConfiguration, entityCallbacks, publisher); - @Override - public RowMapper getRowMapper(String reference) { - if (beanFactory == null) { - throw new IllegalStateException( - "Cannot resolve RowMapper bean reference '" + reference + "'; BeanFactory is not configured."); - } + this.beanFactory = beanFactory; + } - return beanFactory.getBean(reference, RowMapper.class); - } + @Override + public RowMapper getRowMapper(String reference) { - @Override - public ResultSetExtractor getResultSetExtractor(String reference) { - if (beanFactory == null) { - throw new IllegalStateException( - "Cannot resolve ResultSetExtractor bean reference '" + reference + "'; BeanFactory is not configured."); - } + if (beanFactory == null) { + throw new IllegalStateException( + "Cannot resolve RowMapper bean reference '" + reference + "'; BeanFactory is not configured."); + } - return beanFactory.getBean(reference, ResultSetExtractor.class); - } + return beanFactory.getBean(reference, RowMapper.class); + } + + @Override + public ResultSetExtractor getResultSetExtractor(String reference) { + + if (beanFactory == null) { + throw new IllegalStateException( + "Cannot resolve ResultSetExtractor bean reference '" + reference + "'; BeanFactory is not configured."); + } + + return beanFactory.getBean(reference, ResultSetExtractor.class); + } } diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactory.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactory.java index f4faf464..c9b54ac8 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactory.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactory.java @@ -124,8 +124,7 @@ public class JdbcRepositoryFactory extends RepositoryFactorySupport { RelationalPersistentEntity persistentEntity = context .getRequiredPersistentEntity(repositoryInformation.getDomainType()); - return getTargetRepositoryViaReflection(repositoryInformation, template, persistentEntity, - converter); + return getTargetRepositoryViaReflection(repositoryInformation, template, persistentEntity, converter); } @Override diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBean.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBean.java index 950d5641..786f32f3 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBean.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBean.java @@ -25,9 +25,9 @@ import org.springframework.data.jdbc.core.convert.DataAccessStrategy; import org.springframework.data.jdbc.core.convert.DataAccessStrategyFactory; import org.springframework.data.jdbc.core.convert.InsertStrategyFactory; import org.springframework.data.jdbc.core.convert.JdbcConverter; +import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration; import org.springframework.data.jdbc.core.convert.SqlGeneratorSource; import org.springframework.data.jdbc.core.convert.SqlParametersFactory; -import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration; import org.springframework.data.mapping.callback.EntityCallbacks; import org.springframework.data.relational.core.dialect.Dialect; import org.springframework.data.relational.core.mapping.RelationalMappingContext; diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/DependencyTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/DependencyTests.java index 94605048..ad56f42b 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/DependencyTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/DependencyTests.java @@ -61,10 +61,10 @@ public class DependencyTests { JavaClasses importedClasses = new ClassFileImporter().withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS) .importPackages( // - "org.springframework.data.jdbc", // Spring Data Relational + "org.springframework.data.jdbc", // Spring Data JDBC "org.springframework.data.relational", // Spring Data Relational "org.springframework.data" // Spring Data Commons - ) + ).that(onlySpringData()) // .that(ignore(AuditingHandlerBeanDefinitionParser.class)) // .that(ignorePackage("org.springframework.data.aot.hint")) // ignoring aot, since it causes cycles in commons .that(ignorePackage("org.springframework.data.aot")); // ignoring aot, since it causes cycles in commons diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategyUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategyUnitTests.java index e243b2e4..94332c4e 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategyUnitTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategyUnitTests.java @@ -67,8 +67,9 @@ class DefaultDataAccessStrategyUnitTests { converter, // namedJdbcOperations, // sqlParametersFactory, // - insertStrategyFactory, - QueryMappingConfiguration.EMPTY).create(); + insertStrategyFactory, // + QueryMappingConfiguration.EMPTY // + ).create(); relationResolver.setDelegate(accessStrategy); diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mybatis/MyBatisHsqlIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mybatis/MyBatisHsqlIntegrationTests.java index b38244d6..5883f35f 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mybatis/MyBatisHsqlIntegrationTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mybatis/MyBatisHsqlIntegrationTests.java @@ -15,7 +15,9 @@ */ package org.springframework.data.jdbc.mybatis; -import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.*; + +import junit.framework.AssertionFailedError; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.SqlSession; @@ -29,8 +31,8 @@ import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Primary; import org.springframework.data.jdbc.core.convert.DataAccessStrategy; import org.springframework.data.jdbc.core.convert.JdbcConverter; -import org.springframework.data.jdbc.core.dialect.JdbcHsqlDbDialect; import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration; +import org.springframework.data.jdbc.core.dialect.JdbcHsqlDbDialect; import org.springframework.data.jdbc.repository.config.EnableJdbcRepositories; import org.springframework.data.jdbc.testing.DatabaseType; import org.springframework.data.jdbc.testing.EnabledOnDatabase; @@ -42,8 +44,6 @@ import org.springframework.data.repository.CrudRepository; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; -import junit.framework.AssertionFailedError; - /** * Tests the integration with Mybatis. * diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/PartTreeQueryMappingConfigurationIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/PartTreeQueryMappingConfigurationIntegrationTests.java index 164ea1f7..29569014 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/PartTreeQueryMappingConfigurationIntegrationTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/PartTreeQueryMappingConfigurationIntegrationTests.java @@ -31,92 +31,91 @@ import org.springframework.jdbc.core.RowMapper; @IntegrationTest public class PartTreeQueryMappingConfigurationIntegrationTests { - @Configuration - @Import(TestConfiguration.class) - @EnableJdbcRepositories( - considerNestedRepositories = true, - includeFilters = @ComponentScan.Filter(value = CarRepository.class, type = FilterType.ASSIGNABLE_TYPE)) - static class Config { + @Configuration + @Import(TestConfiguration.class) + @EnableJdbcRepositories(considerNestedRepositories = true, + includeFilters = @ComponentScan.Filter(value = CarRepository.class, type = FilterType.ASSIGNABLE_TYPE)) + static class Config { - @Bean - QueryMappingConfiguration mappers(@Qualifier("CustomRowMapperBean") CustomRowMapperBean rowMapperBean) { - return new DefaultQueryMappingConfiguration().registerRowMapper(Car.class, rowMapperBean); - } + @Bean + QueryMappingConfiguration mappers(@Qualifier("CustomRowMapperBean") CustomRowMapperBean rowMapperBean) { + return new DefaultQueryMappingConfiguration().registerRowMapper(Car.class, rowMapperBean); + } - @Bean(value = "CustomRowMapperBean") - public CustomRowMapperBean rowMapperBean() { - return new CustomRowMapperBean(); - } - } + @Bean(value = "CustomRowMapperBean") + public CustomRowMapperBean rowMapperBean() { + return new CustomRowMapperBean(); + } + } - @Autowired - private CarRepository carRepository; + @Autowired private CarRepository carRepository; - @Test // DATAJDBC-1006 - void testCustomQueryMappingConfiguration_predefinedPartTreeQuery() { + @Test // DATAJDBC-1006 + void testCustomQueryMappingConfiguration_predefinedPartTreeQuery() { - // given - Car saved = carRepository.save(new Car(null, "test-model")); + // given + Car saved = carRepository.save(new Car(null, "test-model")); - // when - Optional found = carRepository.findById(saved.getId()); + // when + Optional found = carRepository.findById(saved.getId()); - // then - Assertions.assertThat(found).isPresent().hasValueSatisfying(car -> Assertions.assertThat(car.getModel()).isEqualTo("STUB")); - } + // then + Assertions.assertThat(found).isPresent() + .hasValueSatisfying(car -> Assertions.assertThat(car.getModel()).isEqualTo("STUB")); + } - @Test // DATAJDBC-1006 - void testCustomQueryMappingConfiguration_customPartTreeQuery() { + @Test // DATAJDBC-1006 + void testCustomQueryMappingConfiguration_customPartTreeQuery() { - // given - Car saved = carRepository.save(new Car(null, "test-model")); + // given + Car saved = carRepository.save(new Car(null, "test-model")); - // when - Optional found = carRepository.findOneByModel("test-model"); + // when + Optional found = carRepository.findOneByModel("test-model"); - // then - Assertions.assertThat(found).isPresent().hasValueSatisfying(car -> Assertions.assertThat(car.getModel()).isEqualTo("STUB")); - } + // then + Assertions.assertThat(found).isPresent() + .hasValueSatisfying(car -> Assertions.assertThat(car.getModel()).isEqualTo("STUB")); + } - public static class CustomRowMapperBean implements RowMapper { + public static class CustomRowMapperBean implements RowMapper { - @Override - public Car mapRow(ResultSet rs, int rowNum) throws SQLException { - return new Car(rs.getLong("id"), "STUB"); - } - } + @Override + public Car mapRow(ResultSet rs, int rowNum) throws SQLException { + return new Car(rs.getLong("id"), "STUB"); + } + } - interface CarRepository extends CrudRepository { + interface CarRepository extends CrudRepository { - Optional findOneByModel(String model); - } + Optional findOneByModel(String model); + } - public static class Car { + public static class Car { - @Id - private Long id; - private String model; + @Id private Long id; + private String model; - public Car(Long id, String model) { - this.id = id; - this.model = model; - } + public Car(Long id, String model) { + this.id = id; + this.model = model; + } - public Long getId() { - return this.id; - } + public Long getId() { + return this.id; + } - public String getModel() { - return this.model; - } + public String getModel() { + return this.model; + } - public void setId(Long id) { - this.id = id; - } + public void setId(Long id) { + this.id = id; + } - public void setModel(String model) { - this.model = model; - } - } + public void setModel(String model) { + this.model = model; + } + } } diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/SimpleJdbcRepositoryEventsUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/SimpleJdbcRepositoryEventsUnitTests.java index 8c7d3b05..be5b194f 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/SimpleJdbcRepositoryEventsUnitTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/SimpleJdbcRepositoryEventsUnitTests.java @@ -15,16 +15,11 @@ */ package org.springframework.data.jdbc.repository; -import static java.util.Arrays.asList; -import static org.assertj.core.api.Assertions.assertThat; +import static java.util.Arrays.*; +import static org.assertj.core.api.Assertions.*; import static org.assertj.core.groups.Tuple.tuple; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; import java.util.ArrayList; import java.util.HashMap; @@ -38,7 +33,6 @@ import org.springframework.data.annotation.Id; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; -import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration; import org.springframework.data.jdbc.core.convert.*; import org.springframework.data.jdbc.core.dialect.JdbcH2Dialect; import org.springframework.data.jdbc.core.dialect.JdbcHsqlDbDialect; @@ -65,7 +59,6 @@ import org.springframework.jdbc.support.KeyHolder; import org.springframework.lang.Nullable; import org.springframework.util.ObjectUtils; - /** * Unit tests for application events via {@link SimpleJdbcRepository}. * 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 919299bc..295f97d2 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 @@ -61,7 +61,7 @@ public class StringBasedJdbcQueryMappingConfigurationIntegrationTests { static class Config { @Bean - QueryMappingConfiguration mappers() { + QueryMappingConfiguration mappers() { return new DefaultQueryMappingConfiguration(); } diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositoriesIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositoriesIntegrationTests.java index d52b9c24..90a45449 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositoriesIntegrationTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositoriesIntegrationTests.java @@ -38,9 +38,9 @@ import org.springframework.data.jdbc.core.convert.DataAccessStrategy; import org.springframework.data.jdbc.core.convert.DataAccessStrategyFactory; import org.springframework.data.jdbc.core.convert.InsertStrategyFactory; import org.springframework.data.jdbc.core.convert.JdbcConverter; +import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration; import org.springframework.data.jdbc.core.convert.SqlGeneratorSource; import org.springframework.data.jdbc.core.convert.SqlParametersFactory; -import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration; import org.springframework.data.jdbc.repository.support.JdbcRepositoryFactoryBean; import org.springframework.data.jdbc.testing.IntegrationTest; import org.springframework.data.jdbc.testing.TestConfiguration; @@ -168,8 +168,8 @@ public class EnableJdbcRepositoriesIntegrationTests { @Qualifier("namedParameterJdbcTemplate") NamedParameterJdbcOperations template, RelationalMappingContext context, JdbcConverter converter, Dialect dialect) { return new DataAccessStrategyFactory(new SqlGeneratorSource(context, converter, dialect), converter, template, - new SqlParametersFactory(context, converter), - new InsertStrategyFactory(template, dialect), QueryMappingConfiguration.EMPTY).create(); + new SqlParametersFactory(context, converter), new InsertStrategyFactory(template, dialect), + QueryMappingConfiguration.EMPTY).create(); } @Bean diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/support/JdbcQueryLookupStrategyUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/support/JdbcQueryLookupStrategyUnitTests.java index b6df7230..e1265bdf 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/support/JdbcQueryLookupStrategyUnitTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/support/JdbcQueryLookupStrategyUnitTests.java @@ -30,13 +30,12 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.springframework.context.ApplicationEventPublisher; import org.springframework.data.jdbc.core.convert.JdbcConverter; -import org.springframework.data.jdbc.core.dialect.JdbcH2Dialect; import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration; +import org.springframework.data.jdbc.core.dialect.JdbcH2Dialect; import org.springframework.data.jdbc.repository.config.DefaultQueryMappingConfiguration; import org.springframework.data.jdbc.repository.query.Query; import org.springframework.data.mapping.callback.EntityCallbacks; import org.springframework.data.projection.ProjectionFactory; -import org.springframework.data.relational.core.dialect.H2Dialect; import org.springframework.data.relational.core.mapping.RelationalMappingContext; import org.springframework.data.repository.core.NamedQueries; import org.springframework.data.repository.core.RepositoryMetadata; @@ -123,9 +122,9 @@ class JdbcQueryLookupStrategyUnitTests { assertThatThrownBy( () -> getRepositoryQuery(QueryLookupStrategy.Key.USE_DECLARED_QUERY, "findByName", mappingConfiguration)) - .isInstanceOf(IllegalStateException.class) - .hasMessageContaining("Did neither find a NamedQuery nor an annotated query for method") - .hasMessageContaining("findByName"); + .isInstanceOf(IllegalStateException.class) + .hasMessageContaining("Did neither find a NamedQuery nor an annotated query for method") + .hasMessageContaining("findByName"); } @ParameterizedTest diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBeanUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBeanUnitTests.java index a8ca88a2..3433864f 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBeanUnitTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBeanUnitTests.java @@ -37,8 +37,8 @@ import org.springframework.data.annotation.Id; import org.springframework.data.jdbc.core.convert.DataAccessStrategy; import org.springframework.data.jdbc.core.convert.DefaultDataAccessStrategy; import org.springframework.data.jdbc.core.convert.MappingJdbcConverter; -import org.springframework.data.jdbc.core.mapping.JdbcMappingContext; import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration; +import org.springframework.data.jdbc.core.mapping.JdbcMappingContext; import org.springframework.data.relational.core.dialect.Dialect; import org.springframework.data.relational.core.mapping.RelationalMappingContext; import org.springframework.data.repository.CrudRepository; diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestConfiguration.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestConfiguration.java index 157c45a4..4ea56b1e 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestConfiguration.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestConfiguration.java @@ -24,7 +24,6 @@ import javax.sql.DataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mockito.Mockito; - import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -41,7 +40,6 @@ import org.springframework.data.jdbc.core.dialect.JdbcArrayColumns; import org.springframework.data.jdbc.core.dialect.JdbcDialect; import org.springframework.data.jdbc.core.mapping.JdbcMappingContext; import org.springframework.data.jdbc.core.mapping.JdbcSimpleTypes; -import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration; import org.springframework.data.jdbc.repository.config.DialectResolver; import org.springframework.data.jdbc.repository.support.JdbcRepositoryFactory; import org.springframework.data.mapping.callback.EntityCallback; @@ -79,14 +77,10 @@ public class TestConfiguration { public static final String PROFILE_SINGLE_QUERY_LOADING = "singleQueryLoading"; public static final String PROFILE_NO_SINGLE_QUERY_LOADING = "!" + PROFILE_SINGLE_QUERY_LOADING; - @Autowired - DataSource dataSource; - @Autowired - BeanFactory beanFactory; - @Autowired - ApplicationEventPublisher publisher; - @Autowired(required = false) - SqlSessionFactory sqlSessionFactory; + @Autowired DataSource dataSource; + @Autowired BeanFactory beanFactory; + @Autowired ApplicationEventPublisher publisher; + @Autowired(required = false) SqlSessionFactory sqlSessionFactory; @Bean JdbcRepositoryFactory jdbcRepositoryFactory( @@ -122,7 +116,8 @@ public class TestConfiguration { JdbcConverter converter, Dialect dialect, Optional queryMappingConfiguration) { return new DataAccessStrategyFactory(new SqlGeneratorSource(context, converter, dialect), converter, template, - new SqlParametersFactory(context, converter), new InsertStrategyFactory(template, dialect), queryMappingConfiguration.orElse(QueryMappingConfiguration.EMPTY)).create(); + new SqlParametersFactory(context, converter), new InsertStrategyFactory(template, dialect), + queryMappingConfiguration.orElse(QueryMappingConfiguration.EMPTY)).create(); } @Bean("jdbcMappingContext") @@ -149,9 +144,8 @@ public class TestConfiguration { @Bean CustomConversions jdbcCustomConversions(Dialect dialect) { - SimpleTypeHolder simpleTypeHolder = dialect.simpleTypes().isEmpty() ? - JdbcSimpleTypes.HOLDER : - new SimpleTypeHolder(dialect.simpleTypes(), JdbcSimpleTypes.HOLDER); + SimpleTypeHolder simpleTypeHolder = dialect.simpleTypes().isEmpty() ? JdbcSimpleTypes.HOLDER + : new SimpleTypeHolder(dialect.simpleTypes(), JdbcSimpleTypes.HOLDER); return new JdbcCustomConversions(CustomConversions.StoreConversions.of(simpleTypeHolder, storeConverters(dialect)), Collections.emptyList()); @@ -171,9 +165,8 @@ public class TestConfiguration { Dialect dialect) { org.springframework.data.jdbc.core.dialect.JdbcArrayColumns arrayColumns = dialect instanceof JdbcDialect - ? - ((JdbcDialect) dialect).getArraySupport() : - JdbcArrayColumns.DefaultSupport.INSTANCE; + ? ((JdbcDialect) dialect).getArraySupport() + : JdbcArrayColumns.DefaultSupport.INSTANCE; return new MappingJdbcConverter( // mappingContext, // diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-db2.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-db2.sql index 5bc12b55..ae186fa9 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-db2.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-db2.sql @@ -1,3 +1,7 @@ DROP TABLE car; -CREATE TABLE car ( id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY, model VARCHAR(100)); +CREATE TABLE car +( + id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY, + model VARCHAR(100) +); diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-h2.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-h2.sql index 7306fe6b..af3062a2 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-h2.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-h2.sql @@ -1,4 +1,8 @@ DROP TABLE car; -CREATE TABLE car ( id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY, model VARCHAR(100)); +CREATE TABLE car +( + id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY, + model VARCHAR(100) +); diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-hsql.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-hsql.sql index 9d5026bc..90d71685 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-hsql.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-hsql.sql @@ -1 +1,5 @@ -CREATE TABLE car ( id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY, model VARCHAR(100)); +CREATE TABLE car +( + id BIGINT GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ) PRIMARY KEY, + model VARCHAR(100) +); diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-mariadb.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-mariadb.sql index 41797233..2c75121b 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-mariadb.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-mariadb.sql @@ -1 +1,6 @@ -CREATE TABLE car ( id INT NOT NULL AUTO_INCREMENT, model VARCHAR(100), PRIMARY KEY (id)); \ No newline at end of file +CREATE TABLE car +( + id INT NOT NULL AUTO_INCREMENT, + model VARCHAR(100), + PRIMARY KEY (id) +); \ No newline at end of file diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-mssql.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-mssql.sql index 60acad12..a56e1087 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-mssql.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-mssql.sql @@ -1,2 +1,6 @@ DROP TABLE IF EXISTS car; -CREATE TABLE car ( id int IDENTITY(1,1) PRIMARY KEY, model VARCHAR(100)); \ No newline at end of file +CREATE TABLE car +( + id int IDENTITY(1,1) PRIMARY KEY, + model VARCHAR(100) +); \ No newline at end of file diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-mysql.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-mysql.sql index 41797233..2c75121b 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-mysql.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-mysql.sql @@ -1 +1,6 @@ -CREATE TABLE car ( id INT NOT NULL AUTO_INCREMENT, model VARCHAR(100), PRIMARY KEY (id)); \ No newline at end of file +CREATE TABLE car +( + id INT NOT NULL AUTO_INCREMENT, + model VARCHAR(100), + PRIMARY KEY (id) +); \ No newline at end of file diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-oracle.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-oracle.sql index 18c251e1..815cb8a9 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-oracle.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-oracle.sql @@ -1,2 +1,6 @@ DROP TABLE CAR; -CREATE TABLE CAR ( id NUMBER GENERATED by default on null as IDENTITY PRIMARY KEY, model VARCHAR(100)); +CREATE TABLE CAR +( + id NUMBER GENERATED by default on null as IDENTITY PRIMARY KEY, + model VARCHAR(100) +); diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-postgres.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-postgres.sql index 0118aeda..8ed6bb63 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-postgres.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.repository/PartTreeQueryMappingConfigurationIntegrationTests-postgres.sql @@ -1,2 +1,6 @@ DROP TABLE car; -CREATE TABLE car ( id SERIAL PRIMARY KEY, model VARCHAR(100)); \ No newline at end of file +CREATE TABLE car +( + id SERIAL PRIMARY KEY, + model VARCHAR(100) +); \ No newline at end of file