From c23485d90ecee0d4cb24b2325044d2ee5c75cd55 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 17 Sep 2020 11:13:38 +0200 Subject: [PATCH] #413 - Introduce constructor to R2dbcEntityTemplate accepting ConnectionFactory. This is a short-cut constructor that allows for simpler creation of the Template API. --- .../data/r2dbc/core/R2dbcEntityTemplate.java | 20 +++++++++++++++++++ .../R2dbcEntityTemplateSnippets.java | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java b/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java index 6231a910..35f5134b 100644 --- a/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java +++ b/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java @@ -51,6 +51,7 @@ import org.springframework.data.mapping.context.MappingContext; import org.springframework.data.projection.ProjectionInformation; import org.springframework.data.projection.SpelAwareProxyProjectionFactory; import org.springframework.data.r2dbc.convert.R2dbcConverter; +import org.springframework.data.r2dbc.dialect.DialectResolver; import org.springframework.data.r2dbc.dialect.R2dbcDialect; import org.springframework.data.r2dbc.mapping.OutboundRow; import org.springframework.data.r2dbc.mapping.event.AfterConvertCallback; @@ -101,6 +102,25 @@ public class R2dbcEntityTemplate implements R2dbcEntityOperations, BeanFactoryAw private @Nullable ReactiveEntityCallbacks entityCallbacks; + /** + * Create a new {@link R2dbcEntityTemplate} given {@link ConnectionFactory}. + * + * @param connectionFactory must not be {@literal null}. + * @since 1.2 + */ + public R2dbcEntityTemplate(ConnectionFactory connectionFactory) { + + Assert.notNull(connectionFactory, "ConnectionFactory must not be null"); + + R2dbcDialect dialect = DialectResolver.getDialect(connectionFactory); + + this.databaseClient = DatabaseClient.builder().connectionFactory(connectionFactory) + .bindMarkers(dialect.getBindMarkersFactory()).build(); + this.dataAccessStrategy = new DefaultReactiveDataAccessStrategy(dialect); + this.mappingContext = dataAccessStrategy.getConverter().getMappingContext(); + this.projectionFactory = new SpelAwareProxyProjectionFactory(); + } + /** * Create a new {@link R2dbcEntityTemplate} given {@link DatabaseClient}. * diff --git a/src/test/java/org/springframework/data/r2dbc/documentation/R2dbcEntityTemplateSnippets.java b/src/test/java/org/springframework/data/r2dbc/documentation/R2dbcEntityTemplateSnippets.java index 4eb8f755..852ea6a3 100644 --- a/src/test/java/org/springframework/data/r2dbc/documentation/R2dbcEntityTemplateSnippets.java +++ b/src/test/java/org/springframework/data/r2dbc/documentation/R2dbcEntityTemplateSnippets.java @@ -76,7 +76,7 @@ class R2dbcEntityTemplateSnippets { // tag::insert[] Mono insert = template.insert(Person.class) // <1> - .using(new Person()); // <2> + .using(new Person("John", "Doe")); // <2> // end::insert[] }