From 39b9c325d742f5dd6ec09703926c309a0e326f86 Mon Sep 17 00:00:00 2001 From: Jordan Simpson Date: Sun, 14 Mar 2021 15:18:13 -0500 Subject: [PATCH] Add code from article (#10552) --- .../boot/readonlyrepository/Book.java | 39 +++++++++++++++ .../BookReadOnlyRepository.java | 10 ++++ .../ReadOnlyRepository.java | 15 ++++++ .../ReadOnlyRepositoryApplication.java | 12 +++++ .../readonlyrepository/BookRepository.java | 6 +++ .../ReadOnlyRepositoryUnitTest.java | 50 +++++++++++++++++++ 6 files changed, 132 insertions(+) create mode 100644 spring-boot-modules/spring-boot-data-2/src/main/java/com/baeldung/boot/readonlyrepository/Book.java create mode 100644 spring-boot-modules/spring-boot-data-2/src/main/java/com/baeldung/boot/readonlyrepository/BookReadOnlyRepository.java create mode 100644 spring-boot-modules/spring-boot-data-2/src/main/java/com/baeldung/boot/readonlyrepository/ReadOnlyRepository.java create mode 100644 spring-boot-modules/spring-boot-data-2/src/main/java/com/baeldung/boot/readonlyrepository/ReadOnlyRepositoryApplication.java create mode 100644 spring-boot-modules/spring-boot-data-2/src/test/java/com/baeldung/boot/readonlyrepository/BookRepository.java create mode 100644 spring-boot-modules/spring-boot-data-2/src/test/java/com/baeldung/boot/readonlyrepository/ReadOnlyRepositoryUnitTest.java diff --git a/spring-boot-modules/spring-boot-data-2/src/main/java/com/baeldung/boot/readonlyrepository/Book.java b/spring-boot-modules/spring-boot-data-2/src/main/java/com/baeldung/boot/readonlyrepository/Book.java new file mode 100644 index 0000000000..ff0a8a1bb3 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-2/src/main/java/com/baeldung/boot/readonlyrepository/Book.java @@ -0,0 +1,39 @@ +package com.baeldung.boot.readonlyrepository; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class Book +{ + @Id + @GeneratedValue + private Long id; + private String author; + private String title; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } +} diff --git a/spring-boot-modules/spring-boot-data-2/src/main/java/com/baeldung/boot/readonlyrepository/BookReadOnlyRepository.java b/spring-boot-modules/spring-boot-data-2/src/main/java/com/baeldung/boot/readonlyrepository/BookReadOnlyRepository.java new file mode 100644 index 0000000000..6327ef5a56 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-2/src/main/java/com/baeldung/boot/readonlyrepository/BookReadOnlyRepository.java @@ -0,0 +1,10 @@ +package com.baeldung.boot.readonlyrepository; + +import java.util.List; + +public interface BookReadOnlyRepository extends ReadOnlyRepository { + + List findByAuthor(String author); + + List findByTitle(String title); +} diff --git a/spring-boot-modules/spring-boot-data-2/src/main/java/com/baeldung/boot/readonlyrepository/ReadOnlyRepository.java b/spring-boot-modules/spring-boot-data-2/src/main/java/com/baeldung/boot/readonlyrepository/ReadOnlyRepository.java new file mode 100644 index 0000000000..16f3fd429e --- /dev/null +++ b/spring-boot-modules/spring-boot-data-2/src/main/java/com/baeldung/boot/readonlyrepository/ReadOnlyRepository.java @@ -0,0 +1,15 @@ +package com.baeldung.boot.readonlyrepository; + +import org.springframework.data.repository.NoRepositoryBean; +import org.springframework.data.repository.Repository; + +import java.util.List; +import java.util.Optional; + +@NoRepositoryBean +public interface ReadOnlyRepository extends Repository { + + Optional findById(ID id); + + List findAll(); +} diff --git a/spring-boot-modules/spring-boot-data-2/src/main/java/com/baeldung/boot/readonlyrepository/ReadOnlyRepositoryApplication.java b/spring-boot-modules/spring-boot-data-2/src/main/java/com/baeldung/boot/readonlyrepository/ReadOnlyRepositoryApplication.java new file mode 100644 index 0000000000..f5a67197ad --- /dev/null +++ b/spring-boot-modules/spring-boot-data-2/src/main/java/com/baeldung/boot/readonlyrepository/ReadOnlyRepositoryApplication.java @@ -0,0 +1,12 @@ +package com.baeldung.boot.readonlyrepository; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ReadOnlyRepositoryApplication { + + public static void main(String[] args) { + SpringApplication.run(ReadOnlyRepositoryApplication.class, args); + } +} diff --git a/spring-boot-modules/spring-boot-data-2/src/test/java/com/baeldung/boot/readonlyrepository/BookRepository.java b/spring-boot-modules/spring-boot-data-2/src/test/java/com/baeldung/boot/readonlyrepository/BookRepository.java new file mode 100644 index 0000000000..363b310c8c --- /dev/null +++ b/spring-boot-modules/spring-boot-data-2/src/test/java/com/baeldung/boot/readonlyrepository/BookRepository.java @@ -0,0 +1,6 @@ +package com.baeldung.boot.readonlyrepository; + +import org.springframework.data.repository.CrudRepository; + +public interface BookRepository extends BookReadOnlyRepository, CrudRepository { +} diff --git a/spring-boot-modules/spring-boot-data-2/src/test/java/com/baeldung/boot/readonlyrepository/ReadOnlyRepositoryUnitTest.java b/spring-boot-modules/spring-boot-data-2/src/test/java/com/baeldung/boot/readonlyrepository/ReadOnlyRepositoryUnitTest.java new file mode 100644 index 0000000000..cdb6065f23 --- /dev/null +++ b/spring-boot-modules/spring-boot-data-2/src/test/java/com/baeldung/boot/readonlyrepository/ReadOnlyRepositoryUnitTest.java @@ -0,0 +1,50 @@ +package com.baeldung.boot.readonlyrepository; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.List; +import java.util.NoSuchElementException; + +@SpringBootTest( classes = ReadOnlyRepositoryApplication.class ) +public class ReadOnlyRepositoryUnitTest +{ + @Autowired + private BookRepository bookRepository; + + @Autowired + private BookReadOnlyRepository bookReadOnlyRepository; + + @Test + public void givenBooks_whenUsingReadOnlyRepository_thenGetThem() { + Book aChristmasCarolCharlesDickens = new Book(); + aChristmasCarolCharlesDickens.setTitle("A Christmas Carol"); + aChristmasCarolCharlesDickens.setAuthor("Charles Dickens"); + bookRepository.save(aChristmasCarolCharlesDickens); + + Book greatExpectationsCharlesDickens = new Book(); + greatExpectationsCharlesDickens.setTitle("Great Expectations"); + greatExpectationsCharlesDickens.setAuthor("Charles Dickens"); + bookRepository.save(greatExpectationsCharlesDickens); + + Book greatExpectationsKathyAcker = new Book(); + greatExpectationsKathyAcker.setTitle("Great Expectations"); + greatExpectationsKathyAcker.setAuthor("Kathy Acker"); + bookRepository.save(greatExpectationsKathyAcker); + + List charlesDickensBooks = bookReadOnlyRepository.findByAuthor("Charles Dickens"); + Assertions.assertEquals(2, charlesDickensBooks.size()); + + List greatExpectationsBooks = bookReadOnlyRepository.findByTitle("Great Expectations"); + Assertions.assertEquals(2, greatExpectationsBooks.size()); + + List allBooks = bookReadOnlyRepository.findAll(); + Assertions.assertEquals(3, allBooks.size()); + + Long bookId = allBooks.get(0).getId(); + Book book = bookReadOnlyRepository.findById(bookId).orElseThrow(NoSuchElementException::new); + Assertions.assertNotNull(book); + } +}