From 1c1f2ce38f55e8d28f3e815abfe7d4e8477e02cf Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Thu, 13 Oct 2022 12:33:57 -0500 Subject: [PATCH 1/8] test on these two files foo and FooTest --- pom.xml | 8 +++++++- .../guru/springframework/spring5webapp/Foo.java | 5 +++++ .../springframework/spring5webapp/FooTest.java | 17 +++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 src/main/java/guru/springframework/spring5webapp/Foo.java create mode 100644 src/test/java/guru/springframework/spring5webapp/FooTest.java diff --git a/pom.xml b/pom.xml index f34c1936df..f9bab9f1c2 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,13 @@ spring-boot-starter-test test - + + org.junit.jupiter + junit-jupiter + RELEASE + test + + diff --git a/src/main/java/guru/springframework/spring5webapp/Foo.java b/src/main/java/guru/springframework/spring5webapp/Foo.java new file mode 100644 index 0000000000..43a3c7be30 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/Foo.java @@ -0,0 +1,5 @@ +package guru.springframework.spring5webapp; + +public class Foo { + String getBar() {return "FooBar";} +} diff --git a/src/test/java/guru/springframework/spring5webapp/FooTest.java b/src/test/java/guru/springframework/spring5webapp/FooTest.java new file mode 100644 index 0000000000..010102b97c --- /dev/null +++ b/src/test/java/guru/springframework/spring5webapp/FooTest.java @@ -0,0 +1,17 @@ +package guru.springframework.spring5webapp; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class FooTest { + + @Test + void getBar() { + Foo foo = new Foo(); + + String result = foo.getBar(); + + assertEquals("FooBar", result); + } +} \ No newline at end of file From 1fb017ea5e3ceb77c3ee43f861b0c1b7f3ac410d Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Thu, 13 Oct 2022 12:55:27 -0500 Subject: [PATCH 2/8] a remark --- src/test/java/guru/springframework/spring5webapp/FooTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/guru/springframework/spring5webapp/FooTest.java b/src/test/java/guru/springframework/spring5webapp/FooTest.java index 010102b97c..76d236ee80 100644 --- a/src/test/java/guru/springframework/spring5webapp/FooTest.java +++ b/src/test/java/guru/springframework/spring5webapp/FooTest.java @@ -3,7 +3,7 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; - +// just my remark class FooTest { @Test From b946c52fd8fff2c2b70e0541a75694021a508f82 Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Thu, 13 Oct 2022 13:08:04 -0500 Subject: [PATCH 3/8] pom java update --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f9bab9f1c2..5a45ba7c43 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ UTF-8 UTF-8 - 1.8 + 11 From 4d2de1298a4ba6fe27039e7837b364bd9d2744f5 Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Thu, 10 Nov 2022 18:17:27 -0600 Subject: [PATCH 4/8] Entities --- .../springframework/spring5webapp/Foo.java | 5 --- .../spring5webapp/domain/Author.java | 43 +++++++++++++++++++ .../spring5webapp/domain/Book.java | 43 +++++++++++++++++++ .../spring5webapp/FooTest.java | 17 -------- 4 files changed, 86 insertions(+), 22 deletions(-) delete mode 100644 src/main/java/guru/springframework/spring5webapp/Foo.java create mode 100644 src/main/java/guru/springframework/spring5webapp/domain/Author.java create mode 100644 src/main/java/guru/springframework/spring5webapp/domain/Book.java delete mode 100644 src/test/java/guru/springframework/spring5webapp/FooTest.java diff --git a/src/main/java/guru/springframework/spring5webapp/Foo.java b/src/main/java/guru/springframework/spring5webapp/Foo.java deleted file mode 100644 index 43a3c7be30..0000000000 --- a/src/main/java/guru/springframework/spring5webapp/Foo.java +++ /dev/null @@ -1,5 +0,0 @@ -package guru.springframework.spring5webapp; - -public class Foo { - String getBar() {return "FooBar";} -} diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Author.java b/src/main/java/guru/springframework/spring5webapp/domain/Author.java new file mode 100644 index 0000000000..cb785fedfc --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/domain/Author.java @@ -0,0 +1,43 @@ +package guru.springframework.spring5webapp.domain; + +import java.util.Set; + +public class Author { + private String firstName; + private String lastName; + private Set books; + + // JPA requires a no arg constructor + + public Author(){} + + public Author(String firstName, String lastName, Set books) { + this.firstName = firstName; + this.lastName = lastName; + this.books = books; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public Set getBooks() { + return books; + } + + public void setBooks(Set books) { + this.books = books; + } +} diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Book.java b/src/main/java/guru/springframework/spring5webapp/domain/Book.java new file mode 100644 index 0000000000..ccdf1ab479 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/domain/Book.java @@ -0,0 +1,43 @@ +package guru.springframework.spring5webapp.domain; + +import java.util.Set; + +public class Book { + + private String title; + private String isbn; + private Set authors; + + public Book() { + } + + public Book(String title, String isbn, Set authors) { + this.title = title; + this.isbn = isbn; + this.authors = authors; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getIsbn() { + return isbn; + } + + public void setIsbn(String isbn) { + this.isbn = isbn; + } + + public Set getAuthors() { + return authors; + } + + public void setAuthors(Set authors) { + this.authors = authors; + } +} diff --git a/src/test/java/guru/springframework/spring5webapp/FooTest.java b/src/test/java/guru/springframework/spring5webapp/FooTest.java deleted file mode 100644 index 76d236ee80..0000000000 --- a/src/test/java/guru/springframework/spring5webapp/FooTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package guru.springframework.spring5webapp; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; -// just my remark -class FooTest { - - @Test - void getBar() { - Foo foo = new Foo(); - - String result = foo.getBar(); - - assertEquals("FooBar", result); - } -} \ No newline at end of file From c37e8ed9bc6cbce9370fe2a263bced00df06c69f Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Thu, 10 Nov 2022 18:33:03 -0600 Subject: [PATCH 5/8] Entities --- .../spring5webapp/domain/Author.java | 17 ++++++++++++++++- .../spring5webapp/domain/Book.java | 19 ++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Author.java b/src/main/java/guru/springframework/spring5webapp/domain/Author.java index cb785fedfc..7a95104705 100644 --- a/src/main/java/guru/springframework/spring5webapp/domain/Author.java +++ b/src/main/java/guru/springframework/spring5webapp/domain/Author.java @@ -1,14 +1,21 @@ package guru.springframework.spring5webapp.domain; +import javax.persistence.*; import java.util.Set; +@Entity public class Author { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + private String firstName; private String lastName; + @ManyToMany(mappedBy = "authors") private Set books; // JPA requires a no arg constructor - public Author(){} public Author(String firstName, String lastName, Set books) { @@ -17,6 +24,14 @@ public Author(String firstName, String lastName, Set books) { this.books = books; } + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + public String getFirstName() { return firstName; } diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Book.java b/src/main/java/guru/springframework/spring5webapp/domain/Book.java index ccdf1ab479..e69466c5fc 100644 --- a/src/main/java/guru/springframework/spring5webapp/domain/Book.java +++ b/src/main/java/guru/springframework/spring5webapp/domain/Book.java @@ -1,11 +1,20 @@ package guru.springframework.spring5webapp.domain; +import org.springframework.cache.annotation.EnableCaching; + +import javax.persistence.*; import java.util.Set; +@Entity public class Book { - + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; private String title; private String isbn; + @ManyToMany + @JoinTable(name = "author_book", joinColumns = @JoinColumn(name = "book_id"), + inverseJoinColumns = @JoinColumn(name = "author_id")) private Set authors; public Book() { @@ -17,6 +26,14 @@ public Book(String title, String isbn, Set authors) { this.authors = authors; } + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + public String getTitle() { return title; } From 1f6d6a15f28ed53d5ffb47e7d83ee60b9773a181 Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Thu, 10 Nov 2022 18:51:59 -0600 Subject: [PATCH 6/8] Ready for Repositories --- .../bootstrap/BootStrapData.java | 23 ++++++++++++++++ .../spring5webapp/domain/Author.java | 26 +++++++++++++++++++ .../spring5webapp/domain/Book.java | 26 +++++++++++++++++++ .../repositories/AuthorRepository.java | 7 +++++ .../repositories/BookRepository.java | 7 +++++ 5 files changed, 89 insertions(+) create mode 100644 src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.java create mode 100644 src/main/java/guru/springframework/spring5webapp/repositories/AuthorRepository.java create mode 100644 src/main/java/guru/springframework/spring5webapp/repositories/BookRepository.java diff --git a/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.java b/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.java new file mode 100644 index 0000000000..87147d70e9 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.java @@ -0,0 +1,23 @@ +package guru.springframework.spring5webapp.bootstrap; + +import guru.springframework.spring5webapp.repositories.AuthorRepository; +import guru.springframework.spring5webapp.repositories.BookRepository; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +@Component +public class BootStrapData implements CommandLineRunner { + + private final AuthorRepository authorRepository; + private final BookRepository bookRepository; + + public BootStrapData(AuthorRepository authorRepository, BookRepository bookRepository) { + this.authorRepository = authorRepository; + this.bookRepository = bookRepository; + } + + @Override + public void run(String... args) throws Exception { + + } +} diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Author.java b/src/main/java/guru/springframework/spring5webapp/domain/Author.java index 7a95104705..5e41770a85 100644 --- a/src/main/java/guru/springframework/spring5webapp/domain/Author.java +++ b/src/main/java/guru/springframework/spring5webapp/domain/Author.java @@ -1,6 +1,7 @@ package guru.springframework.spring5webapp.domain; import javax.persistence.*; +import java.util.Objects; import java.util.Set; @Entity @@ -55,4 +56,29 @@ public Set getBooks() { public void setBooks(Set books) { this.books = books; } + + @Override + public String toString() { + return "Author{" + + "id=" + id + + ", firstName='" + firstName + '\'' + + ", lastName='" + lastName + '\'' + + ", books=" + books + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Author author = (Author) o; + + return Objects.equals(id, author.id); + } + + @Override + public int hashCode() { + return id != null ? id.hashCode() : 0; + } } diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Book.java b/src/main/java/guru/springframework/spring5webapp/domain/Book.java index e69466c5fc..03165562a5 100644 --- a/src/main/java/guru/springframework/spring5webapp/domain/Book.java +++ b/src/main/java/guru/springframework/spring5webapp/domain/Book.java @@ -3,6 +3,7 @@ import org.springframework.cache.annotation.EnableCaching; import javax.persistence.*; +import java.util.Objects; import java.util.Set; @Entity @@ -57,4 +58,29 @@ public Set getAuthors() { public void setAuthors(Set authors) { this.authors = authors; } + + @Override + public String toString() { + return "Book{" + + "id=" + id + + ", title='" + title + '\'' + + ", isbn='" + isbn + '\'' + + ", authors=" + authors + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Book book = (Book) o; + + return Objects.equals(id, book.id); + } + + @Override + public int hashCode() { + return id != null ? id.hashCode() : 0; + } } diff --git a/src/main/java/guru/springframework/spring5webapp/repositories/AuthorRepository.java b/src/main/java/guru/springframework/spring5webapp/repositories/AuthorRepository.java new file mode 100644 index 0000000000..a5aa1f8726 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/repositories/AuthorRepository.java @@ -0,0 +1,7 @@ +package guru.springframework.spring5webapp.repositories; + +import guru.springframework.spring5webapp.domain.Author; +import org.springframework.data.repository.CrudRepository; + +public interface AuthorRepository extends CrudRepository { +} diff --git a/src/main/java/guru/springframework/spring5webapp/repositories/BookRepository.java b/src/main/java/guru/springframework/spring5webapp/repositories/BookRepository.java new file mode 100644 index 0000000000..570726803e --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/repositories/BookRepository.java @@ -0,0 +1,7 @@ +package guru.springframework.spring5webapp.repositories; + +import guru.springframework.spring5webapp.domain.Book; +import org.springframework.data.repository.CrudRepository; + +public interface BookRepository extends CrudRepository { +} From 2852a7acaf6a753feab3c60cc6f06795f1266a19 Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Thu, 10 Nov 2022 20:30:11 -0600 Subject: [PATCH 7/8] Ready for Repositories --- src/main/resources/application.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index e69de29bb2..0db082b821 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.h2.console.enabled=true From 26efac58c4788a5b88151ebf120de34da0850ccf Mon Sep 17 00:00:00 2001 From: Luis Rosales Date: Thu, 10 Nov 2022 21:02:40 -0600 Subject: [PATCH 8/8] Ready for Repositories --- .../bootstrap/BootStrapData.java | 23 +++++++++++++++++++ .../spring5webapp/domain/Author.java | 17 ++++++++------ .../spring5webapp/domain/Book.java | 17 ++++++++------ 3 files changed, 43 insertions(+), 14 deletions(-) diff --git a/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.java b/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.java index 87147d70e9..071806750d 100644 --- a/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.java +++ b/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.java @@ -1,10 +1,15 @@ package guru.springframework.spring5webapp.bootstrap; +import guru.springframework.spring5webapp.domain.Author; +import guru.springframework.spring5webapp.domain.Book; import guru.springframework.spring5webapp.repositories.AuthorRepository; import guru.springframework.spring5webapp.repositories.BookRepository; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; +/** + * Created by jt on 12/23/19. + */ @Component public class BootStrapData implements CommandLineRunner { @@ -19,5 +24,23 @@ public BootStrapData(AuthorRepository authorRepository, BookRepository bookRepos @Override public void run(String... args) throws Exception { + Author eric = new Author("Eric", "Evans"); + Book ddd = new Book("Domain Driven Design", "123123"); + eric.getBooks().add(ddd); + ddd.getAuthors().add(eric); + + authorRepository.save(eric); + bookRepository.save(ddd); + + Author rod = new Author("Rod", "Johnson"); + Book noEJB = new Book("J2EE Development without EJB", "3939459459"); + rod.getBooks().add(noEJB); + noEJB.getAuthors().add(rod); + + authorRepository.save(rod); + bookRepository.save(noEJB); + + System.out.println("Started in Bootstrap"); + System.out.println("Number of Books: " + bookRepository.count()); } } diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Author.java b/src/main/java/guru/springframework/spring5webapp/domain/Author.java index 5e41770a85..1d4d36e447 100644 --- a/src/main/java/guru/springframework/spring5webapp/domain/Author.java +++ b/src/main/java/guru/springframework/spring5webapp/domain/Author.java @@ -1,9 +1,12 @@ package guru.springframework.spring5webapp.domain; import javax.persistence.*; -import java.util.Objects; +import java.util.HashSet; import java.util.Set; +/** + * Created by jt on 12/22/19. + */ @Entity public class Author { @@ -13,16 +16,16 @@ public class Author { private String firstName; private String lastName; + @ManyToMany(mappedBy = "authors") - private Set books; + private Set books = new HashSet<>(); - // JPA requires a no arg constructor - public Author(){} + public Author() { + } - public Author(String firstName, String lastName, Set books) { + public Author(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; - this.books = books; } public Long getId() { @@ -74,7 +77,7 @@ public boolean equals(Object o) { Author author = (Author) o; - return Objects.equals(id, author.id); + return id != null ? id.equals(author.id) : author.id == null; } @Override diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Book.java b/src/main/java/guru/springframework/spring5webapp/domain/Book.java index 03165562a5..80b28524f1 100644 --- a/src/main/java/guru/springframework/spring5webapp/domain/Book.java +++ b/src/main/java/guru/springframework/spring5webapp/domain/Book.java @@ -1,30 +1,33 @@ package guru.springframework.spring5webapp.domain; -import org.springframework.cache.annotation.EnableCaching; - import javax.persistence.*; -import java.util.Objects; +import java.util.HashSet; import java.util.Set; +/** + * Created by jt on 12/22/19. + */ @Entity public class Book { + @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; + private String title; private String isbn; + @ManyToMany @JoinTable(name = "author_book", joinColumns = @JoinColumn(name = "book_id"), inverseJoinColumns = @JoinColumn(name = "author_id")) - private Set authors; + private Set authors = new HashSet<>(); public Book() { } - public Book(String title, String isbn, Set authors) { + public Book(String title, String isbn) { this.title = title; this.isbn = isbn; - this.authors = authors; } public Long getId() { @@ -76,7 +79,7 @@ public boolean equals(Object o) { Book book = (Book) o; - return Objects.equals(id, book.id); + return id != null ? id.equals(book.id) : book.id == null; } @Override