From a44f93a9bc9ef311d1185bbec66b6ea27f5b2ed5 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 13 Aug 2019 14:49:13 +0200 Subject: [PATCH] #441 - Polishing. Reuse provided configuration for NamedParameterJdbcOperations. Use listeners and EntityCallbacks. Remove explicit dependency versions. --- jdbc/basics/pom.xml | 12 +++-- .../simpleentity/CategoryConfiguration.java | 45 ++++++------------- .../jdbc/basics/simpleentity/WithInsert.java | 9 ++++ .../basics/simpleentity/WithInsertImpl.java | 11 +++-- 4 files changed, 35 insertions(+), 42 deletions(-) diff --git a/jdbc/basics/pom.xml b/jdbc/basics/pom.xml index a85b176a..2288bdbf 100644 --- a/jdbc/basics/pom.xml +++ b/jdbc/basics/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 spring-data-jdbc-basics @@ -13,20 +14,17 @@ Spring Data JDBC - Basic usage examples Sample project demonstrating Spring Data JDBC features - + org.springframework.boot spring-boot-starter-web - - org.springframework.data spring-data-jdbc - 1.1.0.BUILD-SNAPSHOT - \ No newline at end of file + diff --git a/jdbc/basics/src/main/java/example/springdata/jdbc/basics/simpleentity/CategoryConfiguration.java b/jdbc/basics/src/main/java/example/springdata/jdbc/basics/simpleentity/CategoryConfiguration.java index 74bca453..3f75e65c 100644 --- a/jdbc/basics/src/main/java/example/springdata/jdbc/basics/simpleentity/CategoryConfiguration.java +++ b/jdbc/basics/src/main/java/example/springdata/jdbc/basics/simpleentity/CategoryConfiguration.java @@ -16,28 +16,16 @@ package example.springdata.jdbc.basics.simpleentity; import org.springframework.context.ApplicationEvent; -import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.data.jdbc.core.DataAccessStrategy; -import org.springframework.data.jdbc.core.DefaultDataAccessStrategy; -import org.springframework.data.jdbc.core.JdbcAggregateOperations; -import org.springframework.data.jdbc.core.JdbcAggregateTemplate; -import org.springframework.data.jdbc.core.SqlGeneratorSource; +import org.springframework.data.jdbc.repository.config.AbstractJdbcConfiguration; import org.springframework.data.jdbc.repository.config.EnableJdbcRepositories; -import org.springframework.data.jdbc.repository.config.JdbcConfiguration; -import org.springframework.data.relational.core.conversion.RelationalConverter; -import org.springframework.data.relational.core.mapping.RelationalMappingContext; -import org.springframework.data.relational.core.mapping.event.BeforeSaveEvent; +import org.springframework.data.relational.core.mapping.event.BeforeSaveCallback; import org.springframework.data.relational.core.mapping.event.RelationalEvent; -import org.springframework.jdbc.core.JdbcOperations; -import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; -import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; /** - * Contains infrastructure necessary for creating repositories and two listeners. + * Contains infrastructure necessary for creating repositories, listeners and EntityCallbacks. *

* Not that a listener may change an entity without any problem. * @@ -46,9 +34,11 @@ import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; */ @Configuration @EnableJdbcRepositories -@Import(JdbcConfiguration.class) -public class CategoryConfiguration { +public class CategoryConfiguration extends AbstractJdbcConfiguration { + /** + * @return {@link ApplicationListener} for {@link RelationalEvent}s. + */ @Bean public ApplicationListener loggingListener() { @@ -59,24 +49,17 @@ public class CategoryConfiguration { }; } + /** + * @return {@link BeforeSaveCallback} for {@link Category}. + */ @Bean - public ApplicationListener timeStampingSaveTime() { + public BeforeSaveCallback timeStampingSaveTime() { - return event -> { + return (entity, aggregateChange) -> { - Object entity = event.getEntity(); + entity.timeStamp(); - if (entity instanceof Category) { - Category category = (Category) entity; - category.timeStamp(); - } + return entity; }; } - - // the following bean definitions are only necessary for providing JdbcAggregateOperations for injection into WithInsertImpl. - @Bean - public NamedParameterJdbcOperations namedParameterJdbcOperations(JdbcOperations operations) { - return new NamedParameterJdbcTemplate(operations); - } - } diff --git a/jdbc/basics/src/main/java/example/springdata/jdbc/basics/simpleentity/WithInsert.java b/jdbc/basics/src/main/java/example/springdata/jdbc/basics/simpleentity/WithInsert.java index dbe42152..66faeecd 100644 --- a/jdbc/basics/src/main/java/example/springdata/jdbc/basics/simpleentity/WithInsert.java +++ b/jdbc/basics/src/main/java/example/springdata/jdbc/basics/simpleentity/WithInsert.java @@ -16,8 +16,17 @@ package example.springdata.jdbc.basics.simpleentity; /** + * Fragment interface providing the {@link WithInsert#insert(Object)} signature. + * * @author Jens Schauder */ public interface WithInsert { + + /** + * Custom insert method. + * + * @param t + * @return + */ T insert(T t); } diff --git a/jdbc/basics/src/main/java/example/springdata/jdbc/basics/simpleentity/WithInsertImpl.java b/jdbc/basics/src/main/java/example/springdata/jdbc/basics/simpleentity/WithInsertImpl.java index 124ca720..207f9172 100644 --- a/jdbc/basics/src/main/java/example/springdata/jdbc/basics/simpleentity/WithInsertImpl.java +++ b/jdbc/basics/src/main/java/example/springdata/jdbc/basics/simpleentity/WithInsertImpl.java @@ -15,17 +15,20 @@ */ package example.springdata.jdbc.basics.simpleentity; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.jdbc.core.JdbcAggregateTemplate; -import org.springframework.data.relational.core.mapping.event.WithId; /** + * Fragment implementation providing the {@link WithInsert#insert(Object)} implementation. + * * @author Jens Schauder */ public class WithInsertImpl implements WithInsert { - @Autowired - JdbcAggregateTemplate template; + private final JdbcAggregateTemplate template; + + public WithInsertImpl(JdbcAggregateTemplate template) { + this.template = template; + } @Override public T insert(T t) {