diff --git a/pom.xml b/pom.xml index 3d53c917f4..f74bc70751 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-relational-parent - 1.1.0.BUILD-SNAPSHOT + 1.1.0.DATAJDBC-329-SNAPSHOT pom Spring Data Relational Parent diff --git a/spring-data-jdbc-distribution/pom.xml b/spring-data-jdbc-distribution/pom.xml index 1753776a73..f54b2e9f19 100644 --- a/spring-data-jdbc-distribution/pom.xml +++ b/spring-data-jdbc-distribution/pom.xml @@ -14,7 +14,7 @@ org.springframework.data spring-data-relational-parent - 1.1.0.BUILD-SNAPSHOT + 1.1.0.DATAJDBC-329-SNAPSHOT ../pom.xml diff --git a/spring-data-jdbc/pom.xml b/spring-data-jdbc/pom.xml index 9458230173..edfb06ca84 100644 --- a/spring-data-jdbc/pom.xml +++ b/spring-data-jdbc/pom.xml @@ -5,7 +5,7 @@ 4.0.0 spring-data-jdbc - 1.1.0.BUILD-SNAPSHOT + 1.1.0.DATAJDBC-329-SNAPSHOT Spring Data JDBC Spring Data module for JDBC repositories. @@ -14,7 +14,7 @@ org.springframework.data spring-data-relational-parent - 1.1.0.BUILD-SNAPSHOT + 1.1.0.DATAJDBC-329-SNAPSHOT diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/BasicJdbcConverter.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/BasicJdbcConverter.java index 24f9530f23..083676a3b5 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/BasicJdbcConverter.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/BasicJdbcConverter.java @@ -38,7 +38,7 @@ * @see SimpleTypeHolder * @see CustomConversions */ -public class BasicJdbcConverter extends BasicRelationalConverter { +public class BasicJdbcConverter extends BasicRelationalConverter implements JdbcConverter { /** * Creates a new {@link BasicRelationalConverter} given {@link MappingContext}. diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcConverter.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcConverter.java new file mode 100644 index 0000000000..2d460ed54f --- /dev/null +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcConverter.java @@ -0,0 +1,28 @@ +/* + * Copyright 2019 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 + * + * http://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.data.relational.core.conversion.RelationalConverter; + +/** + * A {@link JdbcConverter} is responsible for converting for values to the native relational representation and vice + * versa. + * + * @author Jens Schauder + * + * @since 1.1 + */ +public interface JdbcConverter extends RelationalConverter {} 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 new file mode 100644 index 0000000000..db717dd323 --- /dev/null +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration.java @@ -0,0 +1,109 @@ +/* + * Copyright 2017-2019 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 + * + * http://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.repository.config; + +import java.util.Optional; + +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.jdbc.core.DataAccessStrategy; +import org.springframework.data.jdbc.core.DefaultDataAccessStrategy; +import org.springframework.data.jdbc.core.JdbcAggregateTemplate; +import org.springframework.data.jdbc.core.SqlGeneratorSource; +import org.springframework.data.jdbc.core.convert.BasicJdbcConverter; +import org.springframework.data.jdbc.core.convert.JdbcConverter; +import org.springframework.data.jdbc.core.convert.JdbcCustomConversions; +import org.springframework.data.jdbc.core.mapping.JdbcMappingContext; +import org.springframework.data.relational.core.conversion.RelationalConverter; +import org.springframework.data.relational.core.mapping.NamingStrategy; +import org.springframework.data.relational.core.mapping.RelationalMappingContext; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; + +/** + * Beans that must be registered for Spring Data JDBC to work. + * + * @author Greg Turnquist + * @author Jens Schauder + * @author Mark Paluch + * @author Michael Simons + * @author Christoph Strobl + * @since 1.1 + */ +@Configuration +public abstract class AbstractJdbcConfiguration { + + /** + * Register a {@link RelationalMappingContext} and apply an optional {@link NamingStrategy}. + * + * @param namingStrategy optional {@link NamingStrategy}. Use {@link NamingStrategy#INSTANCE} as fallback. + * @return must not be {@literal null}. + */ + @Bean + public JdbcMappingContext jdbcMappingContext(Optional namingStrategy) { + + JdbcMappingContext mappingContext = new JdbcMappingContext(namingStrategy.orElse(NamingStrategy.INSTANCE)); + mappingContext.setSimpleTypeHolder(jdbcCustomConversions().getSimpleTypeHolder()); + + return mappingContext; + } + + /** + * Creates a {@link RelationalConverter} using the configured {@link #jdbcMappingContext(Optional)}. Will get + * {@link #jdbcCustomConversions()} applied. + * + * @see #jdbcMappingContext(Optional) + * @see #jdbcCustomConversions() + * @return must not be {@literal null}. + */ + @Bean + public JdbcConverter relationalConverter(RelationalMappingContext mappingContext) { + return new BasicJdbcConverter(mappingContext, jdbcCustomConversions()); + } + + /** + * Register custom {@link Converter}s in a {@link JdbcCustomConversions} object if required. These + * {@link JdbcCustomConversions} will be registered with the {@link #relationalConverter(RelationalMappingContext)}. + * Returns an empty {@link JdbcCustomConversions} instance by default. + * + * @return must not be {@literal null}. + */ + @Bean + public JdbcCustomConversions jdbcCustomConversions() { + return new JdbcCustomConversions(); + } + + /** + * Register a {@link JdbcAggregateTemplate} as a bean for easy use in applications that need a lower level of + * abstraction than the normal repository abstraction. + * + * @param publisher for publishing events. Must not be {@literal null}. + * @param context the mapping context to be used. Must not be {@literal null}. + * @param converter the conversions used when reading and writing from/to the database. Must not be {@literal null}. + * @param operations {@link NamedParameterJdbcOperations} used for accessing the database. Must not be + * {@literal null}. + * @return a {@link JdbcAggregateTemplate}. Guaranteed to be not {@literal null}. + */ + @Bean + public JdbcAggregateTemplate jdbcAggregateTemplate(ApplicationEventPublisher publisher, + RelationalMappingContext context, RelationalConverter converter, NamedParameterJdbcOperations operations) { + + DataAccessStrategy dataAccessStrategy = new DefaultDataAccessStrategy(new SqlGeneratorSource(context), context, + converter, operations); + return new JdbcAggregateTemplate(publisher, context, converter, dataAccessStrategy); + } +} diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositories.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositories.java index 69957eea5f..152520795a 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositories.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositories.java @@ -35,7 +35,7 @@ * @author Greg Turnquist * @author Mark Paluch * @author Fei Dong - * @see JdbcConfiguration + * @see AbstractJdbcConfiguration */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcConfiguration.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcConfiguration.java index e1f349e858..31ade20c78 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcConfiguration.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcConfiguration.java @@ -42,8 +42,11 @@ * @author Mark Paluch * @author Michael Simons * @author Christoph Strobl + * + * @deprecated Use {@link AbstractJdbcConfiguration} instead. */ @Configuration +@Deprecated public class JdbcConfiguration { /** @@ -53,7 +56,7 @@ public class JdbcConfiguration { * @return must not be {@literal null}. */ @Bean - public JdbcMappingContext jdbcMappingContext(Optional namingStrategy) { + public RelationalMappingContext jdbcMappingContext(Optional namingStrategy) { JdbcMappingContext mappingContext = new JdbcMappingContext(namingStrategy.orElse(NamingStrategy.INSTANCE)); mappingContext.setSimpleTypeHolder(jdbcCustomConversions().getSimpleTypeHolder()); diff --git a/spring-data-relational/pom.xml b/spring-data-relational/pom.xml index 11e7db737c..8a55670c53 100644 --- a/spring-data-relational/pom.xml +++ b/spring-data-relational/pom.xml @@ -5,7 +5,7 @@ 4.0.0 spring-data-relational - 1.1.0.BUILD-SNAPSHOT + 1.1.0.DATAJDBC-329-SNAPSHOT Spring Data Relational Spring Data Relational support @@ -13,7 +13,7 @@ org.springframework.data spring-data-relational-parent - 1.1.0.BUILD-SNAPSHOT + 1.1.0.DATAJDBC-329-SNAPSHOT