From 15c2a5a5e3bc12b57971f3615e2268df031ba269 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Wed, 20 Jul 2022 15:57:56 -0400 Subject: [PATCH 01/24] adding example of JPA Entities --- .../spring6webapp/domain/Author.java | 43 +++++++++++++++++++ .../spring6webapp/domain/Book.java | 43 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 src/main/java/guru/springframework/spring6webapp/domain/Author.java create mode 100644 src/main/java/guru/springframework/spring6webapp/domain/Book.java diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Author.java b/src/main/java/guru/springframework/spring6webapp/domain/Author.java new file mode 100644 index 000000000..b3abed061 --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/domain/Author.java @@ -0,0 +1,43 @@ +package guru.springframework.spring6webapp.domain; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + +/** + * Created by jt, Spring Framework Guru. + */ +@Entity +public class Author { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + private String firstName; + private String lastName; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + 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; + } +} diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Book.java b/src/main/java/guru/springframework/spring6webapp/domain/Book.java new file mode 100644 index 000000000..7ff68c4cb --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/domain/Book.java @@ -0,0 +1,43 @@ +package guru.springframework.spring6webapp.domain; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + +/** + * Created by jt, Spring Framework Guru. + */ +@Entity +public class Book { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + private String title; + private String isbn; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + 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; + } +} From efec0cf35a4350ce83b47b62299d644d89594b35 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Wed, 20 Jul 2022 16:34:14 -0400 Subject: [PATCH 02/24] adding relationships example --- .../spring6webapp/domain/Author.java | 18 +++++++++++++---- .../spring6webapp/domain/Book.java | 20 +++++++++++++++---- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Author.java b/src/main/java/guru/springframework/spring6webapp/domain/Author.java index b3abed061..8085f82e1 100644 --- a/src/main/java/guru/springframework/spring6webapp/domain/Author.java +++ b/src/main/java/guru/springframework/spring6webapp/domain/Author.java @@ -1,9 +1,8 @@ package guru.springframework.spring6webapp.domain; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; + +import java.util.Set; /** * Created by jt, Spring Framework Guru. @@ -17,6 +16,17 @@ public class Author { private String firstName; private String lastName; + @ManyToMany(mappedBy = "authors") + private Set books; + + public Set getBooks() { + return books; + } + + public void setBooks(Set books) { + this.books = books; + } + public Long getId() { return id; } diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Book.java b/src/main/java/guru/springframework/spring6webapp/domain/Book.java index 7ff68c4cb..cd3f6a3bf 100644 --- a/src/main/java/guru/springframework/spring6webapp/domain/Book.java +++ b/src/main/java/guru/springframework/spring6webapp/domain/Book.java @@ -1,9 +1,8 @@ package guru.springframework.spring6webapp.domain; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; + +import java.util.Set; /** * Created by jt, Spring Framework Guru. @@ -17,6 +16,19 @@ public class Book { 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 Set getAuthors() { + return authors; + } + + public void setAuthors(Set authors) { + this.authors = authors; + } + public Long getId() { return id; } From c46332e869a66e299fc003d6e5640506eb915e7c Mon Sep 17 00:00:00 2001 From: John Thompson Date: Thu, 21 Jul 2022 14:51:27 -0400 Subject: [PATCH 03/24] adding hibernate equity --- .../spring6webapp/domain/Author.java | 36 +++++++++++++++++++ .../spring6webapp/domain/Book.java | 33 +++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Author.java b/src/main/java/guru/springframework/spring6webapp/domain/Author.java index 8085f82e1..815a3584d 100644 --- a/src/main/java/guru/springframework/spring6webapp/domain/Author.java +++ b/src/main/java/guru/springframework/spring6webapp/domain/Author.java @@ -50,4 +50,40 @@ public String getLastName() { public void setLastName(String lastName) { this.lastName = lastName; } + + @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 instanceof Author)) return false; + + Author author = (Author) o; + + return getId() != null ? getId().equals(author.getId()) : author.getId() == null; + } + + @Override + public int hashCode() { + return getId() != null ? getId().hashCode() : 0; + } } + + + + + + + + + + + diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Book.java b/src/main/java/guru/springframework/spring6webapp/domain/Book.java index cd3f6a3bf..c6ea1d56d 100644 --- a/src/main/java/guru/springframework/spring6webapp/domain/Book.java +++ b/src/main/java/guru/springframework/spring6webapp/domain/Book.java @@ -52,4 +52,37 @@ public String getIsbn() { public void setIsbn(String isbn) { this.isbn = isbn; } + + @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 instanceof Book)) return false; + + Book book = (Book) o; + + return getId() != null ? getId().equals(book.getId()) : book.getId() == null; + } + + @Override + public int hashCode() { + return getId() != null ? getId().hashCode() : 0; + } } + + + + + + + + From fbd64f79f87781930e826e3ab54e8db53d1607f3 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Thu, 21 Jul 2022 15:20:09 -0400 Subject: [PATCH 04/24] adding hibernate equity --- .../spring6webapp/repositories/AuthorRepository.java | 10 ++++++++++ .../spring6webapp/repositories/BookRepository.java | 10 ++++++++++ 2 files changed, 20 insertions(+) create mode 100644 src/main/java/guru/springframework/spring6webapp/repositories/AuthorRepository.java create mode 100644 src/main/java/guru/springframework/spring6webapp/repositories/BookRepository.java diff --git a/src/main/java/guru/springframework/spring6webapp/repositories/AuthorRepository.java b/src/main/java/guru/springframework/spring6webapp/repositories/AuthorRepository.java new file mode 100644 index 000000000..e982ee89d --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/repositories/AuthorRepository.java @@ -0,0 +1,10 @@ +package guru.springframework.spring6webapp.repositories; + +import guru.springframework.spring6webapp.domain.Author; +import org.springframework.data.repository.CrudRepository; + +/** + * Created by jt, Spring Framework Guru. + */ +public interface AuthorRepository extends CrudRepository { +} diff --git a/src/main/java/guru/springframework/spring6webapp/repositories/BookRepository.java b/src/main/java/guru/springframework/spring6webapp/repositories/BookRepository.java new file mode 100644 index 000000000..533999205 --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/repositories/BookRepository.java @@ -0,0 +1,10 @@ +package guru.springframework.spring6webapp.repositories; + +import guru.springframework.spring6webapp.domain.Book; +import org.springframework.data.repository.CrudRepository; + +/** + * Created by jt, Spring Framework Guru. + */ +public interface BookRepository extends CrudRepository { +} From a97fa5c1904e1a4f872748f79299aeb810a891b1 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Thu, 21 Jul 2022 15:57:19 -0400 Subject: [PATCH 05/24] adding bootstrap --- .../bootstrap/BootstrapData.java | 67 +++++++++++++++++++ .../spring6webapp/domain/Author.java | 3 +- .../spring6webapp/domain/Book.java | 3 +- 3 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java diff --git a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java new file mode 100644 index 000000000..31699ba31 --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java @@ -0,0 +1,67 @@ +package guru.springframework.spring6webapp.bootstrap; + +import guru.springframework.spring6webapp.domain.Author; +import guru.springframework.spring6webapp.domain.Book; +import guru.springframework.spring6webapp.repositories.AuthorRepository; +import guru.springframework.spring6webapp.repositories.BookRepository; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +/** + * Created by jt, Spring Framework Guru. + */ +@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 { + Author eric = new Author(); + eric.setFirstName("Eric"); + eric.setLastName("Evans"); + + Book ddd = new Book(); + ddd.setTitle("Domain Driven Design"); + ddd.setIsbn("123456"); + + Author ericSaved = authorRepository.save(eric); + Book dddSaved = bookRepository.save(ddd); + + Author rod = new Author(); + rod.setFirstName("Rod"); + rod.setLastName("Johnson"); + + Book noEJB = new Book(); + noEJB.setTitle("J2EE Development without EJB"); + noEJB.setIsbn("54757585"); + + Author rodSaved = authorRepository.save(rod); + Book noEJBSaved = bookRepository.save(noEJB); + + ericSaved.getBooks().add(dddSaved); + rodSaved.getBooks().add(noEJBSaved); + + System.out.println("In Bootstrap"); + System.out.println("Author Count: " + authorRepository.count()); + System.out.println("Book Count: " + bookRepository.count()); + + + } +} + + + + + + + + + + diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Author.java b/src/main/java/guru/springframework/spring6webapp/domain/Author.java index 815a3584d..6f16ad971 100644 --- a/src/main/java/guru/springframework/spring6webapp/domain/Author.java +++ b/src/main/java/guru/springframework/spring6webapp/domain/Author.java @@ -2,6 +2,7 @@ import jakarta.persistence.*; +import java.util.HashSet; import java.util.Set; /** @@ -17,7 +18,7 @@ public class Author { private String lastName; @ManyToMany(mappedBy = "authors") - private Set books; + private Set books = new HashSet<>(); public Set getBooks() { return books; diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Book.java b/src/main/java/guru/springframework/spring6webapp/domain/Book.java index c6ea1d56d..1890c9326 100644 --- a/src/main/java/guru/springframework/spring6webapp/domain/Book.java +++ b/src/main/java/guru/springframework/spring6webapp/domain/Book.java @@ -2,6 +2,7 @@ import jakarta.persistence.*; +import java.util.HashSet; import java.util.Set; /** @@ -19,7 +20,7 @@ public class Book { @ManyToMany @JoinTable(name = "author_book", joinColumns = @JoinColumn(name = "book_id"), inverseJoinColumns = @JoinColumn(name = "author_id")) - private Set authors; + private Set authors = new HashSet<>(); public Set getAuthors() { return authors; From d3b153d80e52035c9ac2e65a86f994c3709421c7 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Fri, 22 Jul 2022 14:51:46 -0400 Subject: [PATCH 06/24] adding publisher --- .../bootstrap/BootstrapData.java | 12 +- .../spring6webapp/domain/Publisher.java | 108 ++++++++++++++++++ .../repositories/PublisherRepository.java | 10 ++ 3 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 src/main/java/guru/springframework/spring6webapp/domain/Publisher.java create mode 100644 src/main/java/guru/springframework/spring6webapp/repositories/PublisherRepository.java diff --git a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java index 31699ba31..c6a2aff26 100644 --- a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java +++ b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java @@ -2,8 +2,10 @@ import guru.springframework.spring6webapp.domain.Author; import guru.springframework.spring6webapp.domain.Book; +import guru.springframework.spring6webapp.domain.Publisher; import guru.springframework.spring6webapp.repositories.AuthorRepository; import guru.springframework.spring6webapp.repositories.BookRepository; +import guru.springframework.spring6webapp.repositories.PublisherRepository; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; @@ -15,10 +17,13 @@ public class BootstrapData implements CommandLineRunner { private final AuthorRepository authorRepository; private final BookRepository bookRepository; + private final PublisherRepository publisherRepository; - public BootstrapData(AuthorRepository authorRepository, BookRepository bookRepository) { + public BootstrapData(AuthorRepository authorRepository, BookRepository bookRepository, + PublisherRepository publisherRepository) { this.authorRepository = authorRepository; this.bookRepository = bookRepository; + this.publisherRepository = publisherRepository; } @Override @@ -52,7 +57,12 @@ public void run(String... args) throws Exception { System.out.println("Author Count: " + authorRepository.count()); System.out.println("Book Count: " + bookRepository.count()); + Publisher publisher = new Publisher(); + publisher.setPublisherName("My Publisher"); + publisher.setAddress("123 Main"); + publisherRepository.save(publisher); + System.out.println("Publisher Count: " + publisherRepository.count()); } } diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Publisher.java b/src/main/java/guru/springframework/spring6webapp/domain/Publisher.java new file mode 100644 index 000000000..4b90392a3 --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/domain/Publisher.java @@ -0,0 +1,108 @@ +package guru.springframework.spring6webapp.domain; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + +/** + * Created by jt, Spring Framework Guru. + */ +@Entity +public class Publisher { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String publisherName; + private String address; + private String city; + private String state; + private String zipCode; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getPublisherName() { + return publisherName; + } + + public void setPublisherName(String publisherName) { + this.publisherName = publisherName; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getZipCode() { + return zipCode; + } + + public void setZipCode(String zipCode) { + this.zipCode = zipCode; + } + + @Override + public String toString() { + return "Publisher{" + + "id=" + id + + ", publisherName='" + publisherName + '\'' + + ", address='" + address + '\'' + + ", city='" + city + '\'' + + ", state='" + state + '\'' + + ", zipCode='" + zipCode + '\'' + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Publisher)) return false; + + Publisher publisher = (Publisher) o; + + return id != null ? id.equals(publisher.id) : publisher.id == null; + } + + @Override + public int hashCode() { + return id != null ? id.hashCode() : 0; + } +} + + + + + + + + + + diff --git a/src/main/java/guru/springframework/spring6webapp/repositories/PublisherRepository.java b/src/main/java/guru/springframework/spring6webapp/repositories/PublisherRepository.java new file mode 100644 index 000000000..69167cd4e --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/repositories/PublisherRepository.java @@ -0,0 +1,10 @@ +package guru.springframework.spring6webapp.repositories; + +import guru.springframework.spring6webapp.domain.Publisher; +import org.springframework.data.repository.CrudRepository; + +/** + * Created by jt, Spring Framework Guru. + */ +public interface PublisherRepository extends CrudRepository { +} From 3841492084271b1c75c1a70cf77ebd68bf435eeb Mon Sep 17 00:00:00 2001 From: John Thompson Date: Fri, 22 Jul 2022 15:19:27 -0400 Subject: [PATCH 07/24] adding publisher adding save --- .../springframework/spring6webapp/bootstrap/BootstrapData.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java index 31699ba31..bd2307da4 100644 --- a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java +++ b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java @@ -48,6 +48,9 @@ public void run(String... args) throws Exception { ericSaved.getBooks().add(dddSaved); rodSaved.getBooks().add(noEJBSaved); + authorRepository.save(ericSaved); + authorRepository.save(rodSaved); + System.out.println("In Bootstrap"); System.out.println("Author Count: " + authorRepository.count()); System.out.println("Book Count: " + bookRepository.count()); From ce255868d53d06679b6a351fecede04a159aa127 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Fri, 22 Jul 2022 15:41:04 -0400 Subject: [PATCH 08/24] adding publisher relationship --- .../spring6webapp/bootstrap/BootstrapData.java | 15 +++++++++++---- .../spring6webapp/domain/Book.java | 11 +++++++++++ .../spring6webapp/domain/Publisher.java | 10 ++++++---- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java index 4d6057d6b..a29a92c36 100644 --- a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java +++ b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java @@ -53,17 +53,24 @@ public void run(String... args) throws Exception { ericSaved.getBooks().add(dddSaved); rodSaved.getBooks().add(noEJBSaved); + Publisher publisher = new Publisher(); + publisher.setPublisherName("My Publisher"); + publisher.setAddress("123 Main"); + Publisher savedPublisher = publisherRepository.save(publisher); + + dddSaved.setPublisher(savedPublisher); + noEJBSaved.setPublisher(savedPublisher); + authorRepository.save(ericSaved); authorRepository.save(rodSaved); + bookRepository.save(dddSaved); + bookRepository.save(noEJBSaved); System.out.println("In Bootstrap"); System.out.println("Author Count: " + authorRepository.count()); System.out.println("Book Count: " + bookRepository.count()); - Publisher publisher = new Publisher(); - publisher.setPublisherName("My Publisher"); - publisher.setAddress("123 Main"); - publisherRepository.save(publisher); + System.out.println("Publisher Count: " + publisherRepository.count()); } diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Book.java b/src/main/java/guru/springframework/spring6webapp/domain/Book.java index 1890c9326..6214cb7b8 100644 --- a/src/main/java/guru/springframework/spring6webapp/domain/Book.java +++ b/src/main/java/guru/springframework/spring6webapp/domain/Book.java @@ -22,6 +22,17 @@ public class Book { inverseJoinColumns = @JoinColumn(name = "author_id")) private Set authors = new HashSet<>(); + @ManyToOne + private Publisher publisher; + + public Publisher getPublisher() { + return publisher; + } + + public void setPublisher(Publisher publisher) { + this.publisher = publisher; + } + public Set getAuthors() { return authors; } diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Publisher.java b/src/main/java/guru/springframework/spring6webapp/domain/Publisher.java index 4b90392a3..85cf13f26 100644 --- a/src/main/java/guru/springframework/spring6webapp/domain/Publisher.java +++ b/src/main/java/guru/springframework/spring6webapp/domain/Publisher.java @@ -1,9 +1,8 @@ package guru.springframework.spring6webapp.domain; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; + +import java.util.Set; /** * Created by jt, Spring Framework Guru. @@ -21,6 +20,9 @@ public class Publisher { private String state; private String zipCode; + @OneToMany(mappedBy = "publisher") + private Set books; + public Long getId() { return id; } From 0d97c141b777401c2ee54b6d978de48f55e2d0ff Mon Sep 17 00:00:00 2001 From: John Thompson Date: Fri, 22 Jul 2022 15:57:24 -0400 Subject: [PATCH 09/24] enable h2 console --- .../springframework/spring6webapp/bootstrap/BootstrapData.java | 3 +++ src/main/resources/application.properties | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java index a29a92c36..e99fd1009 100644 --- a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java +++ b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java @@ -52,6 +52,9 @@ public void run(String... args) throws Exception { ericSaved.getBooks().add(dddSaved); rodSaved.getBooks().add(noEJBSaved); + dddSaved.getAuthors().add(ericSaved); + noEJBSaved.getAuthors().add(rodSaved); + Publisher publisher = new Publisher(); publisher.setPublisherName("My Publisher"); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 8b1378917..0db082b82 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1 @@ - +spring.h2.console.enabled=true From 0c547bf4a520d8f1c66b52510a5f790b326d5e4c Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 24 Jul 2022 08:05:02 -0400 Subject: [PATCH 10/24] adding book service layer --- .../spring6webapp/services/BookService.java | 12 ++++++++++ .../services/BookServiceImpl.java | 23 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 src/main/java/guru/springframework/spring6webapp/services/BookService.java create mode 100644 src/main/java/guru/springframework/spring6webapp/services/BookServiceImpl.java diff --git a/src/main/java/guru/springframework/spring6webapp/services/BookService.java b/src/main/java/guru/springframework/spring6webapp/services/BookService.java new file mode 100644 index 000000000..55cb56ce3 --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/services/BookService.java @@ -0,0 +1,12 @@ +package guru.springframework.spring6webapp.services; + +import guru.springframework.spring6webapp.domain.Book; + +/** + * Created by jt, Spring Framework Guru. + */ +public interface BookService { + + Iterable findAll(); + +} diff --git a/src/main/java/guru/springframework/spring6webapp/services/BookServiceImpl.java b/src/main/java/guru/springframework/spring6webapp/services/BookServiceImpl.java new file mode 100644 index 000000000..a6398aa9b --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/services/BookServiceImpl.java @@ -0,0 +1,23 @@ +package guru.springframework.spring6webapp.services; + +import guru.springframework.spring6webapp.domain.Book; +import guru.springframework.spring6webapp.repositories.BookRepository; +import org.springframework.stereotype.Service; + +/** + * Created by jt, Spring Framework Guru. + */ +@Service +public class BookServiceImpl implements BookService { + + private final BookRepository bookRepository; + + public BookServiceImpl(BookRepository bookRepository) { + this.bookRepository = bookRepository; + } + + @Override + public Iterable findAll() { + return bookRepository.findAll(); + } +} From 52bd3bfd1ea0dc7b21d742f8d46399ada3a3b03a Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 24 Jul 2022 08:19:21 -0400 Subject: [PATCH 11/24] adding book controller --- .../controllers/BookController.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/main/java/guru/springframework/spring6webapp/controllers/BookController.java diff --git a/src/main/java/guru/springframework/spring6webapp/controllers/BookController.java b/src/main/java/guru/springframework/spring6webapp/controllers/BookController.java new file mode 100644 index 000000000..c56598662 --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/controllers/BookController.java @@ -0,0 +1,28 @@ +package guru.springframework.spring6webapp.controllers; + +import guru.springframework.spring6webapp.services.BookService; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; + +/** + * Created by jt, Spring Framework Guru. + */ +@Controller +public class BookController { + + private final BookService bookService; + + public BookController(BookService bookService) { + this.bookService = bookService; + } + + @RequestMapping("/books") + public String getBooks(Model model) { + + model.addAttribute("books", bookService.findAll()); + + return "books"; + } + +} From 85651f8d67178c1e25fb5e878f5ef54b29192c2c Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 24 Jul 2022 08:54:08 -0400 Subject: [PATCH 12/24] adding list books --- pom.xml | 4 ++++ src/main/resources/templates/books.html | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/main/resources/templates/books.html diff --git a/pom.xml b/pom.xml index e19d4268e..d650ff0c3 100644 --- a/pom.xml +++ b/pom.xml @@ -25,6 +25,10 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.boot + spring-boot-starter-thymeleaf + com.h2database diff --git a/src/main/resources/templates/books.html b/src/main/resources/templates/books.html new file mode 100644 index 000000000..0d4ab40df --- /dev/null +++ b/src/main/resources/templates/books.html @@ -0,0 +1,24 @@ + + + + + Spring Framework Guru + + +

Book List

+ + + + + + + + + + + + +
IDTitlePublisher
123 Spring in ActionWrox
+ + + \ No newline at end of file From 4af908cbf22116b7d9351223d9db708a05ee27b0 Mon Sep 17 00:00:00 2001 From: PanGian97 Date: Sun, 8 Oct 2023 01:12:13 +0300 Subject: [PATCH 13/24] just added my name --- .../java/guru/springframework/spring6webapp/domain/Book.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Book.java b/src/main/java/guru/springframework/spring6webapp/domain/Book.java index 7ff68c4cb..6923ad8d0 100644 --- a/src/main/java/guru/springframework/spring6webapp/domain/Book.java +++ b/src/main/java/guru/springframework/spring6webapp/domain/Book.java @@ -6,7 +6,7 @@ import jakarta.persistence.Id; /** - * Created by jt, Spring Framework Guru. + * Created by jt, Spring Framework Guru and Pangian */ @Entity public class Book { From f04997ff4ec7205ca1db755b64dc26a0bbce8acb Mon Sep 17 00:00:00 2001 From: John Thompson Date: Wed, 20 Jul 2022 16:34:14 -0400 Subject: [PATCH 14/24] adding relationships example --- .../spring6webapp/domain/Author.java | 18 +++++++++++++---- .../spring6webapp/domain/Book.java | 20 +++++++++++++++---- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Author.java b/src/main/java/guru/springframework/spring6webapp/domain/Author.java index b3abed061..8085f82e1 100644 --- a/src/main/java/guru/springframework/spring6webapp/domain/Author.java +++ b/src/main/java/guru/springframework/spring6webapp/domain/Author.java @@ -1,9 +1,8 @@ package guru.springframework.spring6webapp.domain; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; + +import java.util.Set; /** * Created by jt, Spring Framework Guru. @@ -17,6 +16,17 @@ public class Author { private String firstName; private String lastName; + @ManyToMany(mappedBy = "authors") + private Set books; + + public Set getBooks() { + return books; + } + + public void setBooks(Set books) { + this.books = books; + } + public Long getId() { return id; } diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Book.java b/src/main/java/guru/springframework/spring6webapp/domain/Book.java index 6923ad8d0..23b7ef6b3 100644 --- a/src/main/java/guru/springframework/spring6webapp/domain/Book.java +++ b/src/main/java/guru/springframework/spring6webapp/domain/Book.java @@ -1,9 +1,8 @@ package guru.springframework.spring6webapp.domain; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; + +import java.util.Set; /** * Created by jt, Spring Framework Guru and Pangian @@ -17,6 +16,19 @@ public class Book { 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 Set getAuthors() { + return authors; + } + + public void setAuthors(Set authors) { + this.authors = authors; + } + public Long getId() { return id; } From a687ed9b94fb018d472f5380be94373afcfadbf7 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Wed, 20 Jul 2022 16:34:14 -0400 Subject: [PATCH 15/24] Implimented part 17 --- .../spring6webapp/domain/Author.java | 26 +++++++++++++++++++ .../spring6webapp/domain/Book.java | 26 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Author.java b/src/main/java/guru/springframework/spring6webapp/domain/Author.java index 8085f82e1..10f31c07d 100644 --- a/src/main/java/guru/springframework/spring6webapp/domain/Author.java +++ b/src/main/java/guru/springframework/spring6webapp/domain/Author.java @@ -2,6 +2,7 @@ import jakarta.persistence.*; +import java.util.Objects; import java.util.Set; /** @@ -50,4 +51,29 @@ public String getLastName() { public void setLastName(String lastName) { this.lastName = lastName; } + + @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/spring6webapp/domain/Book.java b/src/main/java/guru/springframework/spring6webapp/domain/Book.java index 23b7ef6b3..618319f93 100644 --- a/src/main/java/guru/springframework/spring6webapp/domain/Book.java +++ b/src/main/java/guru/springframework/spring6webapp/domain/Book.java @@ -2,6 +2,7 @@ import jakarta.persistence.*; +import java.util.Objects; import java.util.Set; /** @@ -52,4 +53,29 @@ public String getIsbn() { public void setIsbn(String isbn) { this.isbn = isbn; } + + @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; + } } From f660fdaef08064dd2ba1737c13d7681b86a50722 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Thu, 21 Jul 2022 15:57:19 -0400 Subject: [PATCH 16/24] adding bootstrap --- .../bootstrap/BootstrapData.java | 67 +++++++++++++++++++ .../spring6webapp/domain/Author.java | 3 +- .../spring6webapp/domain/Book.java | 3 +- 3 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java diff --git a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java new file mode 100644 index 000000000..31699ba31 --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java @@ -0,0 +1,67 @@ +package guru.springframework.spring6webapp.bootstrap; + +import guru.springframework.spring6webapp.domain.Author; +import guru.springframework.spring6webapp.domain.Book; +import guru.springframework.spring6webapp.repositories.AuthorRepository; +import guru.springframework.spring6webapp.repositories.BookRepository; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +/** + * Created by jt, Spring Framework Guru. + */ +@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 { + Author eric = new Author(); + eric.setFirstName("Eric"); + eric.setLastName("Evans"); + + Book ddd = new Book(); + ddd.setTitle("Domain Driven Design"); + ddd.setIsbn("123456"); + + Author ericSaved = authorRepository.save(eric); + Book dddSaved = bookRepository.save(ddd); + + Author rod = new Author(); + rod.setFirstName("Rod"); + rod.setLastName("Johnson"); + + Book noEJB = new Book(); + noEJB.setTitle("J2EE Development without EJB"); + noEJB.setIsbn("54757585"); + + Author rodSaved = authorRepository.save(rod); + Book noEJBSaved = bookRepository.save(noEJB); + + ericSaved.getBooks().add(dddSaved); + rodSaved.getBooks().add(noEJBSaved); + + System.out.println("In Bootstrap"); + System.out.println("Author Count: " + authorRepository.count()); + System.out.println("Book Count: " + bookRepository.count()); + + + } +} + + + + + + + + + + diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Author.java b/src/main/java/guru/springframework/spring6webapp/domain/Author.java index 815a3584d..6f16ad971 100644 --- a/src/main/java/guru/springframework/spring6webapp/domain/Author.java +++ b/src/main/java/guru/springframework/spring6webapp/domain/Author.java @@ -2,6 +2,7 @@ import jakarta.persistence.*; +import java.util.HashSet; import java.util.Set; /** @@ -17,7 +18,7 @@ public class Author { private String lastName; @ManyToMany(mappedBy = "authors") - private Set books; + private Set books = new HashSet<>(); public Set getBooks() { return books; diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Book.java b/src/main/java/guru/springframework/spring6webapp/domain/Book.java index c6ea1d56d..1890c9326 100644 --- a/src/main/java/guru/springframework/spring6webapp/domain/Book.java +++ b/src/main/java/guru/springframework/spring6webapp/domain/Book.java @@ -2,6 +2,7 @@ import jakarta.persistence.*; +import java.util.HashSet; import java.util.Set; /** @@ -19,7 +20,7 @@ public class Book { @ManyToMany @JoinTable(name = "author_book", joinColumns = @JoinColumn(name = "book_id"), inverseJoinColumns = @JoinColumn(name = "author_id")) - private Set authors; + private Set authors = new HashSet<>(); public Set getAuthors() { return authors; From 2935b09483bd83cbc42ef75b62a4dd94fc368c24 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Fri, 22 Jul 2022 15:19:27 -0400 Subject: [PATCH 17/24] adding publisher adding save --- .../springframework/spring6webapp/bootstrap/BootstrapData.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java index 31699ba31..bd2307da4 100644 --- a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java +++ b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java @@ -48,6 +48,9 @@ public void run(String... args) throws Exception { ericSaved.getBooks().add(dddSaved); rodSaved.getBooks().add(noEJBSaved); + authorRepository.save(ericSaved); + authorRepository.save(rodSaved); + System.out.println("In Bootstrap"); System.out.println("Author Count: " + authorRepository.count()); System.out.println("Book Count: " + bookRepository.count()); From 2141d4896f0a36195e87b9d899c62025b2aba86b Mon Sep 17 00:00:00 2001 From: pangian Date: Thu, 26 Oct 2023 23:59:44 +0300 Subject: [PATCH 18/24] Modified --- .../springframework/spring6webapp/bootstrap/BootstrapData.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java index bd2307da4..7c5480dfa 100644 --- a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java +++ b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java @@ -54,7 +54,7 @@ public void run(String... args) throws Exception { System.out.println("In Bootstrap"); System.out.println("Author Count: " + authorRepository.count()); System.out.println("Book Count: " + bookRepository.count()); - +// this is a modified version by Pangian } } From 9fc3ad56d89f2e8f5993f4cf987d552953721271 Mon Sep 17 00:00:00 2001 From: pangian Date: Fri, 27 Oct 2023 00:01:21 +0300 Subject: [PATCH 19/24] Modified --- .../springframework/spring6webapp/bootstrap/BootstrapData.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java index 7c5480dfa..96d3946ce 100644 --- a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java +++ b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java @@ -54,7 +54,7 @@ public void run(String... args) throws Exception { System.out.println("In Bootstrap"); System.out.println("Author Count: " + authorRepository.count()); System.out.println("Book Count: " + bookRepository.count()); -// this is a modified version by Pangian +// this is a modified version by Pg } } From 3d8451d4e6471047a0c667ece61df13420f45758 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Fri, 22 Jul 2022 21:51:46 +0300 Subject: [PATCH 20/24] adding publisher --- .../bootstrap/BootstrapData.java | 17 ++- .../spring6webapp/domain/Publisher.java | 108 ++++++++++++++++++ .../repositories/PublisherRepository.java | 10 ++ 3 files changed, 130 insertions(+), 5 deletions(-) create mode 100644 src/main/java/guru/springframework/spring6webapp/domain/Publisher.java create mode 100644 src/main/java/guru/springframework/spring6webapp/repositories/PublisherRepository.java diff --git a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java index 96d3946ce..c6a2aff26 100644 --- a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java +++ b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java @@ -2,8 +2,10 @@ import guru.springframework.spring6webapp.domain.Author; import guru.springframework.spring6webapp.domain.Book; +import guru.springframework.spring6webapp.domain.Publisher; import guru.springframework.spring6webapp.repositories.AuthorRepository; import guru.springframework.spring6webapp.repositories.BookRepository; +import guru.springframework.spring6webapp.repositories.PublisherRepository; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; @@ -15,10 +17,13 @@ public class BootstrapData implements CommandLineRunner { private final AuthorRepository authorRepository; private final BookRepository bookRepository; + private final PublisherRepository publisherRepository; - public BootstrapData(AuthorRepository authorRepository, BookRepository bookRepository) { + public BootstrapData(AuthorRepository authorRepository, BookRepository bookRepository, + PublisherRepository publisherRepository) { this.authorRepository = authorRepository; this.bookRepository = bookRepository; + this.publisherRepository = publisherRepository; } @Override @@ -48,14 +53,16 @@ public void run(String... args) throws Exception { ericSaved.getBooks().add(dddSaved); rodSaved.getBooks().add(noEJBSaved); - authorRepository.save(ericSaved); - authorRepository.save(rodSaved); - System.out.println("In Bootstrap"); System.out.println("Author Count: " + authorRepository.count()); System.out.println("Book Count: " + bookRepository.count()); -// this is a modified version by Pg + Publisher publisher = new Publisher(); + publisher.setPublisherName("My Publisher"); + publisher.setAddress("123 Main"); + publisherRepository.save(publisher); + + System.out.println("Publisher Count: " + publisherRepository.count()); } } diff --git a/src/main/java/guru/springframework/spring6webapp/domain/Publisher.java b/src/main/java/guru/springframework/spring6webapp/domain/Publisher.java new file mode 100644 index 000000000..4b90392a3 --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/domain/Publisher.java @@ -0,0 +1,108 @@ +package guru.springframework.spring6webapp.domain; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + +/** + * Created by jt, Spring Framework Guru. + */ +@Entity +public class Publisher { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String publisherName; + private String address; + private String city; + private String state; + private String zipCode; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getPublisherName() { + return publisherName; + } + + public void setPublisherName(String publisherName) { + this.publisherName = publisherName; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getZipCode() { + return zipCode; + } + + public void setZipCode(String zipCode) { + this.zipCode = zipCode; + } + + @Override + public String toString() { + return "Publisher{" + + "id=" + id + + ", publisherName='" + publisherName + '\'' + + ", address='" + address + '\'' + + ", city='" + city + '\'' + + ", state='" + state + '\'' + + ", zipCode='" + zipCode + '\'' + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Publisher)) return false; + + Publisher publisher = (Publisher) o; + + return id != null ? id.equals(publisher.id) : publisher.id == null; + } + + @Override + public int hashCode() { + return id != null ? id.hashCode() : 0; + } +} + + + + + + + + + + diff --git a/src/main/java/guru/springframework/spring6webapp/repositories/PublisherRepository.java b/src/main/java/guru/springframework/spring6webapp/repositories/PublisherRepository.java new file mode 100644 index 000000000..69167cd4e --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/repositories/PublisherRepository.java @@ -0,0 +1,10 @@ +package guru.springframework.spring6webapp.repositories; + +import guru.springframework.spring6webapp.domain.Publisher; +import org.springframework.data.repository.CrudRepository; + +/** + * Created by jt, Spring Framework Guru. + */ +public interface PublisherRepository extends CrudRepository { +} From f9a83e9c1df29f7fdeea4d07a81911bcf3a6aad3 Mon Sep 17 00:00:00 2001 From: pangian Date: Mon, 30 Oct 2023 20:17:46 +0200 Subject: [PATCH 21/24] Modified --- pom.xml | 4 ++++ .../bootstrap/BootstrapData.java | 2 ++ .../controllers/BookController.java | 22 +++++++++++++++++++ .../spring6webapp/services/BookService.java | 8 +++++++ .../services/BookServiceImpl.java | 18 +++++++++++++++ src/main/resources/application.properties | 2 +- src/main/resources/templates/books.html | 10 +++++++++ 7 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 src/main/java/guru/springframework/spring6webapp/controllers/BookController.java create mode 100644 src/main/java/guru/springframework/spring6webapp/services/BookService.java create mode 100644 src/main/java/guru/springframework/spring6webapp/services/BookServiceImpl.java create mode 100644 src/main/resources/templates/books.html diff --git a/pom.xml b/pom.xml index dcbb6cb43..39ff40be1 100644 --- a/pom.xml +++ b/pom.xml @@ -32,6 +32,10 @@ h2 runtime
+ + org.springframework.boot + spring-boot-starter-thymeleaf + org.springframework.boot spring-boot-starter-test diff --git a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java index a29a92c36..c1590e261 100644 --- a/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java +++ b/src/main/java/guru/springframework/spring6webapp/bootstrap/BootstrapData.java @@ -52,6 +52,8 @@ public void run(String... args) throws Exception { ericSaved.getBooks().add(dddSaved); rodSaved.getBooks().add(noEJBSaved); + dddSaved.getAuthors().add(ericSaved); + noEJBSaved.getAuthors().add(rodSaved); Publisher publisher = new Publisher(); publisher.setPublisherName("My Publisher"); diff --git a/src/main/java/guru/springframework/spring6webapp/controllers/BookController.java b/src/main/java/guru/springframework/spring6webapp/controllers/BookController.java new file mode 100644 index 000000000..7e4edcf54 --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/controllers/BookController.java @@ -0,0 +1,22 @@ +package guru.springframework.spring6webapp.controllers; + + +import guru.springframework.spring6webapp.domain.Book; +import guru.springframework.spring6webapp.services.BookService; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; + +public class BookController { + private final BookService bookService; + + public BookController(BookService bookService) { + this.bookService = bookService; + } + + @RequestMapping("/books") + public String getBooks(Model model) { + model.addAttribute("books", bookService.findAll()); + return "books"; + } + +} diff --git a/src/main/java/guru/springframework/spring6webapp/services/BookService.java b/src/main/java/guru/springframework/spring6webapp/services/BookService.java new file mode 100644 index 000000000..1cfef45fa --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/services/BookService.java @@ -0,0 +1,8 @@ +package guru.springframework.spring6webapp.services; + +import guru.springframework.spring6webapp.domain.Book; + +public interface BookService { + + Iterable findAll(); +} diff --git a/src/main/java/guru/springframework/spring6webapp/services/BookServiceImpl.java b/src/main/java/guru/springframework/spring6webapp/services/BookServiceImpl.java new file mode 100644 index 000000000..063927467 --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/services/BookServiceImpl.java @@ -0,0 +1,18 @@ +package guru.springframework.spring6webapp.services; + +import guru.springframework.spring6webapp.domain.Book; +import guru.springframework.spring6webapp.repositories.BookRepository; + +public class BookServiceImpl implements BookService { + + private final BookRepository bookRepository; + + public BookServiceImpl(BookRepository bookRepository) { + this.bookRepository = bookRepository; + } + + @Override + public Iterable findAll() { + return bookRepository.findAll(); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 8b1378917..0db082b82 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1 @@ - +spring.h2.console.enabled=true diff --git a/src/main/resources/templates/books.html b/src/main/resources/templates/books.html new file mode 100644 index 000000000..566549bdf --- /dev/null +++ b/src/main/resources/templates/books.html @@ -0,0 +1,10 @@ + + + + + Title + + + + + \ No newline at end of file From 17bb46d0b4285bf398c3fac80b2d37ada25e8abc Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 24 Jul 2022 15:54:08 +0300 Subject: [PATCH 22/24] adding list books --- pom.xml | 34 ++++++++++++++++++++----- src/main/resources/templates/books.html | 20 ++++++++++++--- 2 files changed, 44 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index 39ff40be1..d650ff0c3 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.2 + 3.0.0-M3 guru.springframework @@ -13,11 +13,9 @@ 0.0.1-SNAPSHOT spring-6-webapp Spring 6 Web App - 17 - org.springframework.boot @@ -27,15 +25,16 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.boot + spring-boot-starter-thymeleaf + + com.h2database h2 runtime - - org.springframework.boot - spring-boot-starter-thymeleaf - org.springframework.boot spring-boot-starter-test @@ -51,4 +50,25 @@ + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + diff --git a/src/main/resources/templates/books.html b/src/main/resources/templates/books.html index 566549bdf..0d4ab40df 100644 --- a/src/main/resources/templates/books.html +++ b/src/main/resources/templates/books.html @@ -1,10 +1,24 @@ - + - - Title + + Spring Framework Guru +

Book List

+ + + + + + + + + + + + +
IDTitlePublisher
123 Spring in ActionWrox
\ No newline at end of file From 595dbfb8f7a6077dd2f790c2863fd99e248a78e7 Mon Sep 17 00:00:00 2001 From: pangian Date: Mon, 30 Oct 2023 21:04:54 +0200 Subject: [PATCH 23/24] Modified --- .../controllers/AuthorController.java | 19 +++++++++++++++ .../spring6webapp/services/AuthorService.java | 8 +++++++ .../services/AuthorServiceImpl.java | 19 +++++++++++++++ src/main/resources/templates/authors.html | 24 +++++++++++++++++++ 4 files changed, 70 insertions(+) create mode 100644 src/main/java/guru/springframework/spring6webapp/controllers/AuthorController.java create mode 100644 src/main/java/guru/springframework/spring6webapp/services/AuthorService.java create mode 100644 src/main/java/guru/springframework/spring6webapp/services/AuthorServiceImpl.java create mode 100644 src/main/resources/templates/authors.html diff --git a/src/main/java/guru/springframework/spring6webapp/controllers/AuthorController.java b/src/main/java/guru/springframework/spring6webapp/controllers/AuthorController.java new file mode 100644 index 000000000..e4f56355b --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/controllers/AuthorController.java @@ -0,0 +1,19 @@ +package guru.springframework.spring6webapp.controllers; + +import guru.springframework.spring6webapp.services.AuthorService; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; + +public class AuthorController { + + private final AuthorService authorService; + + public AuthorController(AuthorService authorService) { + this.authorService = authorService; + } + @RequestMapping("/authors") + public String getAuthors(Model model){ + model.addAttribute("authors",authorService.findAll()); + return "authors"; + } +} diff --git a/src/main/java/guru/springframework/spring6webapp/services/AuthorService.java b/src/main/java/guru/springframework/spring6webapp/services/AuthorService.java new file mode 100644 index 000000000..1d1ac9e42 --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/services/AuthorService.java @@ -0,0 +1,8 @@ +package guru.springframework.spring6webapp.services; + +import guru.springframework.spring6webapp.domain.Author; + +public interface AuthorService { + + Iterable findAll(); +} diff --git a/src/main/java/guru/springframework/spring6webapp/services/AuthorServiceImpl.java b/src/main/java/guru/springframework/spring6webapp/services/AuthorServiceImpl.java new file mode 100644 index 000000000..9b0377635 --- /dev/null +++ b/src/main/java/guru/springframework/spring6webapp/services/AuthorServiceImpl.java @@ -0,0 +1,19 @@ +package guru.springframework.spring6webapp.services; + +import guru.springframework.spring6webapp.domain.Author; +import guru.springframework.spring6webapp.repositories.AuthorRepository; +import org.springframework.stereotype.Service; + +@Service +public class AuthorServiceImpl implements AuthorService { + private final AuthorRepository authorRepository; + + public AuthorServiceImpl(AuthorRepository authorRepository) { + this.authorRepository = authorRepository; + } + + @Override + public Iterable findAll() { + return authorRepository.findAll(); + } +} diff --git a/src/main/resources/templates/authors.html b/src/main/resources/templates/authors.html new file mode 100644 index 000000000..df50ed635 --- /dev/null +++ b/src/main/resources/templates/authors.html @@ -0,0 +1,24 @@ + + + + + Spring Framework Guru + + +

Author List

+ + + + + + + + + + + + +
IDFirstNameLastName
123 Spring in ActionWrox
+ + + \ No newline at end of file From a9a8db4110c156874319301054dea813f1ba6d7e Mon Sep 17 00:00:00 2001 From: pangian Date: Mon, 30 Oct 2023 21:09:09 +0200 Subject: [PATCH 24/24] Modified --- .../spring6webapp/controllers/AuthorController.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/guru/springframework/spring6webapp/controllers/AuthorController.java b/src/main/java/guru/springframework/spring6webapp/controllers/AuthorController.java index e4f56355b..42de49a1b 100644 --- a/src/main/java/guru/springframework/spring6webapp/controllers/AuthorController.java +++ b/src/main/java/guru/springframework/spring6webapp/controllers/AuthorController.java @@ -1,9 +1,14 @@ package guru.springframework.spring6webapp.controllers; import guru.springframework.spring6webapp.services.AuthorService; +import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; +/** + * Created by jt, Spring Framework Guru. + */ +@Controller public class AuthorController { private final AuthorService authorService;