From 6b3f0add5fed2409da55108c25b9a5fb076a14f3 Mon Sep 17 00:00:00 2001 From: AndrewBergstrom Date: Sat, 25 Feb 2023 17:54:38 -0700 Subject: [PATCH 1/6] Setting up Author and Book class, creating new entities, getters, setters, equals, hascodes, and using toString() --- .../spring5webapp/domain/Author.java | 83 +++++++++++++++++ .../spring5webapp/domain/Book.java | 91 +++++++++++++++++++ 2 files changed, 174 insertions(+) create mode 100644 src/main/java/guru/springframework/spring5webapp/domain/Author.java create mode 100644 src/main/java/guru/springframework/spring5webapp/domain/Book.java 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..3d48ca67dc --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/domain/Author.java @@ -0,0 +1,83 @@ +package guru.springframework.spring5webapp.domain; + +import javax.persistence.*; +import java.util.Objects; +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; + + public Author() { + } + + public Author(String firstName, String lastName, Set books) { + this.firstName = firstName; + this.lastName = lastName; + this.books = books; + } + + 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; + } + + public Set getBooks() { + return books; + } + + public void setBooks(Set books) { + this.books = books; + } + + @Override + public String toString() { + return "Author{" + + "id=" + id + + ", firstName='" + firstName + '\'' + + ", lastName='" + lastName + '\'' + + ", books=" + books + + '}'; + } + + // SETTING UP THE EQUALS & HASHCODE FUNCTION + @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 new file mode 100644 index 0000000000..a577f12d74 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/domain/Book.java @@ -0,0 +1,91 @@ +package guru.springframework.spring5webapp.domain; + +import javax.persistence.*; +import java.util.Objects; +import java.util.Set; + +@Entity +public class Book { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String title; + private String isbn; + + /* + Setting up the relationships between author and books + */ + @ManyToMany + @JoinTable(name = "author_book", joinColumns = @JoinColumn(name = "book_id"), + inverseJoinColumns = @JoinColumn(name = "author_id")) + private Set authors; + + public Book() { + } + + public Book(String title, String isbn, Set authors) { + this.title = title; + this.isbn = isbn; + + this.authors = authors; + } + + 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; + } + + public Set getAuthors() { + return authors; + } + + 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; + } +} From 29d6d78d5407071849e0859eee032b2531c76934 Mon Sep 17 00:00:00 2001 From: AndrewBergstrom Date: Sat, 25 Feb 2023 18:02:14 -0700 Subject: [PATCH 2/6] author and book class set up' --- .../java/guru/springframework/spring5webapp/domain/Author.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Author.java b/src/main/java/guru/springframework/spring5webapp/domain/Author.java index 3d48ca67dc..5d578fb591 100644 --- a/src/main/java/guru/springframework/spring5webapp/domain/Author.java +++ b/src/main/java/guru/springframework/spring5webapp/domain/Author.java @@ -55,6 +55,8 @@ public void setBooks(Set books) { this.books = books; } + + // TO STRING FOR JSON TYPE DATA @Override public String toString() { return "Author{" + From 47811a32f5d889b81c485be55265754d9a0b5c1b Mon Sep 17 00:00:00 2001 From: AndrewBergstrom Date: Sat, 25 Feb 2023 18:54:39 -0700 Subject: [PATCH 3/6] added Bootstrap dummy data --- .../spring5webapp/bootstrap/BootStrap.java | 44 +++++++++++++++++++ .../spring5webapp/domain/Author.java | 6 +-- .../spring5webapp/domain/Book.java | 7 ++- .../repositories/AuthorRepository.java | 7 +++ .../repositories/BookRepositroy.java | 7 +++ 5 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrap.java create mode 100644 src/main/java/guru/springframework/spring5webapp/repositories/AuthorRepository.java create mode 100644 src/main/java/guru/springframework/spring5webapp/repositories/BookRepositroy.java diff --git a/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrap.java b/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrap.java new file mode 100644 index 0000000000..f4650a351b --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrap.java @@ -0,0 +1,44 @@ +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.BookRepositroy; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +@Component +public class BootStrap implements CommandLineRunner { + + private final AuthorRepository authorRepository; + private final BookRepositroy bookRepositroy; + + public BootStrap(AuthorRepository authorRepository, BookRepositroy bookRepositroy) { + this.authorRepository = authorRepository; + this.bookRepositroy = bookRepositroy; + } + + @Override + public void run(String... args) throws Exception { + Author eric = new Author("Eric", "Evans"); + Book ddd = new Book("Domain Driven Desing", "123123"); + + eric.getBooks().add(ddd); + ddd.getAuthors().add(eric); + + authorRepository.save(eric); + bookRepositroy.save(ddd); + + Author rod = new Author("Rod", "Johnson"); + Book noEJB = new Book("J2EE Development without EJ8", "39394546"); + rod.getBooks().add(noEJB); + noEJB.getAuthors().add(rod); + + authorRepository.save(rod); + bookRepositroy.save(noEJB); + + System.out.println("Started in Bootstrap"); + System.out.println("Number of Books: " + bookRepositroy.count()); + + } +} diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Author.java b/src/main/java/guru/springframework/spring5webapp/domain/Author.java index 5d578fb591..e2f6e38f8f 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.HashSet; import java.util.Objects; import java.util.Set; @@ -12,15 +13,14 @@ public class Author { private String firstName; private String lastName; @ManyToMany(mappedBy ="authors") - private Set books; + private Set books = new HashSet<>(); 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() { diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Book.java b/src/main/java/guru/springframework/spring5webapp/domain/Book.java index a577f12d74..ebc4ccc2a8 100644 --- a/src/main/java/guru/springframework/spring5webapp/domain/Book.java +++ b/src/main/java/guru/springframework/spring5webapp/domain/Book.java @@ -1,6 +1,7 @@ package guru.springframework.spring5webapp.domain; import javax.persistence.*; +import java.util.HashSet; import java.util.Objects; import java.util.Set; @@ -20,16 +21,14 @@ 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 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() { 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/BookRepositroy.java b/src/main/java/guru/springframework/spring5webapp/repositories/BookRepositroy.java new file mode 100644 index 0000000000..a597997b60 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/repositories/BookRepositroy.java @@ -0,0 +1,7 @@ +package guru.springframework.spring5webapp.repositories; + +import guru.springframework.spring5webapp.domain.Book; +import org.springframework.data.repository.CrudRepository; + +public interface BookRepositroy extends CrudRepository { +} From 584bc76954f4560620c14c06b75af15b96c37414 Mon Sep 17 00:00:00 2001 From: AndrewBergstrom Date: Mon, 27 Feb 2023 17:13:39 -0700 Subject: [PATCH 4/6] Created publisher bootstrap data, publisherRepository as an interface, and a publisher class with properties of name, address, city, state, zip. --- .../spring5webapp/bootstrap/BootStrap.java | 40 +++++-- .../spring5webapp/domain/Publisher.java | 111 ++++++++++++++++++ ...ookRepositroy.java => BookRepository.java} | 2 +- .../repositories/PublisherRepository.java | 7 ++ 4 files changed, 150 insertions(+), 10 deletions(-) create mode 100644 src/main/java/guru/springframework/spring5webapp/domain/Publisher.java rename src/main/java/guru/springframework/spring5webapp/repositories/{BookRepositroy.java => BookRepository.java} (73%) create mode 100644 src/main/java/guru/springframework/spring5webapp/repositories/PublisherRepository.java diff --git a/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrap.java b/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrap.java index f4650a351b..2bec279430 100644 --- a/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrap.java +++ b/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrap.java @@ -2,8 +2,10 @@ import guru.springframework.spring5webapp.domain.Author; import guru.springframework.spring5webapp.domain.Book; +import guru.springframework.spring5webapp.domain.Publisher; import guru.springframework.spring5webapp.repositories.AuthorRepository; -import guru.springframework.spring5webapp.repositories.BookRepositroy; +import guru.springframework.spring5webapp.repositories.BookRepository; +import guru.springframework.spring5webapp.repositories.PublisherRepository; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; @@ -11,23 +13,44 @@ public class BootStrap implements CommandLineRunner { private final AuthorRepository authorRepository; - private final BookRepositroy bookRepositroy; + private final BookRepository bookRepository; + private final PublisherRepository publisherRepository; - public BootStrap(AuthorRepository authorRepository, BookRepositroy bookRepositroy) { + // Constructor that tells Spring Framework we want instances injected into class using dependency injection + public BootStrap(AuthorRepository authorRepository, BookRepository bookRepository, PublisherRepository publisherRepository) { this.authorRepository = authorRepository; - this.bookRepositroy = bookRepositroy; + this.bookRepository = bookRepository; + this.publisherRepository = publisherRepository; } @Override public void run(String... args) throws Exception { + + System.out.println("Started in Bootstrap"); + + // Creating NEW publisher object + Publisher publisher = new Publisher(); + publisher.setName("SFG Publishing"); + publisher.setCity("St Petersburg"); + publisher.setState("FL"); + + publisherRepository.save(publisher); + + System.out.println("Publisher Count: " + publisherRepository.count()); + + // Creating new Author object Author eric = new Author("Eric", "Evans"); - Book ddd = new Book("Domain Driven Desing", "123123"); + // Creating new Book object + Book ddd = new Book("Domain Driven Design", "123123"); + + //adding book to Set in Author Class eric.getBooks().add(ddd); + //adding author to Set in Book Class ddd.getAuthors().add(eric); authorRepository.save(eric); - bookRepositroy.save(ddd); + bookRepository.save(ddd); Author rod = new Author("Rod", "Johnson"); Book noEJB = new Book("J2EE Development without EJ8", "39394546"); @@ -35,10 +58,9 @@ public void run(String... args) throws Exception { noEJB.getAuthors().add(rod); authorRepository.save(rod); - bookRepositroy.save(noEJB); + bookRepository.save(noEJB); - System.out.println("Started in Bootstrap"); - System.out.println("Number of Books: " + bookRepositroy.count()); + System.out.println("Number of Books: " + bookRepository.count()); } } diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Publisher.java b/src/main/java/guru/springframework/spring5webapp/domain/Publisher.java new file mode 100644 index 0000000000..29901cec3e --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/domain/Publisher.java @@ -0,0 +1,111 @@ +/* TODO: Create new POJO for publisher + * Properties should include: name, addressLine1, city, state, zip + * Annotate publisher as Entity + * Setup Id property + * Override equals, hashcode & toString + * Create Publisher in Bootstrap class + * Verify publisher output from Bootstrap class + * */ + +package guru.springframework.spring5webapp.domain; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import java.util.Objects; + + +@Entity +public class Publisher { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + //GeneratedValue tells hibernate how it's being persisted + private Long id; + + // Setting up properties of class + private String name; + private String addressLine1; + private String city; + private String state; + private String zip; + + public Publisher() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAddressLine1() { + return addressLine1; + } + + public void setAddressLine1(String addressLine1) { + this.addressLine1 = addressLine1; + } + + 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 getZip() { + return zip; + } + + public void setZip(String zip) { + this.zip = zip; + } + + @Override + public String toString() { + return "Publisher{" + + "id=" + id + + ", name='" + name + '\'' + + ", addressLine1='" + addressLine1 + '\'' + + ", city='" + city + '\'' + + ", state='" + state + '\'' + + ", zip='" + zip + '\'' + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Publisher publisher = (Publisher) o; + + return Objects.equals(id, publisher.id); + } + + @Override + public int hashCode() { + return id != null ? id.hashCode() : 0; + } +} diff --git a/src/main/java/guru/springframework/spring5webapp/repositories/BookRepositroy.java b/src/main/java/guru/springframework/spring5webapp/repositories/BookRepository.java similarity index 73% rename from src/main/java/guru/springframework/spring5webapp/repositories/BookRepositroy.java rename to src/main/java/guru/springframework/spring5webapp/repositories/BookRepository.java index a597997b60..570726803e 100644 --- a/src/main/java/guru/springframework/spring5webapp/repositories/BookRepositroy.java +++ b/src/main/java/guru/springframework/spring5webapp/repositories/BookRepository.java @@ -3,5 +3,5 @@ import guru.springframework.spring5webapp.domain.Book; import org.springframework.data.repository.CrudRepository; -public interface BookRepositroy extends CrudRepository { +public interface BookRepository extends CrudRepository { } diff --git a/src/main/java/guru/springframework/spring5webapp/repositories/PublisherRepository.java b/src/main/java/guru/springframework/spring5webapp/repositories/PublisherRepository.java new file mode 100644 index 0000000000..8445629922 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/repositories/PublisherRepository.java @@ -0,0 +1,7 @@ +package guru.springframework.spring5webapp.repositories; + +import guru.springframework.spring5webapp.domain.Publisher; +import org.springframework.data.repository.CrudRepository; + +public interface PublisherRepository extends CrudRepository { +} From 236201bc4a8dadac475eb78a67221086944babbc Mon Sep 17 00:00:00 2001 From: AndrewBergstrom Date: Mon, 27 Feb 2023 20:28:10 -0700 Subject: [PATCH 5/6] finished setting up publisher --- .../spring5webapp/bootstrap/BootStrap.java | 10 +++++++ .../spring5webapp/domain/Book.java | 10 +++++++ .../spring5webapp/domain/Publisher.java | 27 ++++++++++--------- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrap.java b/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrap.java index 2bec279430..5865b12989 100644 --- a/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrap.java +++ b/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrap.java @@ -49,18 +49,28 @@ public void run(String... args) throws Exception { //adding author to Set in Book Class ddd.getAuthors().add(eric); + ddd.setPublisher(publisher); + publisher.getBooks().add(ddd); + authorRepository.save(eric); bookRepository.save(ddd); + publisherRepository.save(publisher); Author rod = new Author("Rod", "Johnson"); Book noEJB = new Book("J2EE Development without EJ8", "39394546"); rod.getBooks().add(noEJB); noEJB.getAuthors().add(rod); + noEJB.setPublisher(publisher); + publisher.getBooks().add(noEJB); + authorRepository.save(rod); bookRepository.save(noEJB); + publisherRepository.save(publisher); System.out.println("Number of Books: " + bookRepository.count()); + System.out.println("Publisher Number of Books: " + publisher.getBooks().size()); + } } diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Book.java b/src/main/java/guru/springframework/spring5webapp/domain/Book.java index ebc4ccc2a8..d65522ce36 100644 --- a/src/main/java/guru/springframework/spring5webapp/domain/Book.java +++ b/src/main/java/guru/springframework/spring5webapp/domain/Book.java @@ -14,6 +14,8 @@ public class Book { private String title; private String isbn; + @ManyToOne + private Publisher publisher; /* Setting up the relationships between author and books @@ -31,6 +33,14 @@ public Book(String title, String isbn) { this.isbn = isbn; } + public Publisher getPublisher() { + return publisher; + } + + public void setPublisher(Publisher publisher) { + this.publisher = publisher; + } + public Long getId() { return id; } diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Publisher.java b/src/main/java/guru/springframework/spring5webapp/domain/Publisher.java index 29901cec3e..6e40df5991 100644 --- a/src/main/java/guru/springframework/spring5webapp/domain/Publisher.java +++ b/src/main/java/guru/springframework/spring5webapp/domain/Publisher.java @@ -1,19 +1,10 @@ -/* TODO: Create new POJO for publisher - * Properties should include: name, addressLine1, city, state, zip - * Annotate publisher as Entity - * Setup Id property - * Override equals, hashcode & toString - * Create Publisher in Bootstrap class - * Verify publisher output from Bootstrap class - * */ package guru.springframework.spring5webapp.domain; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; +import javax.persistence.*; +import java.util.HashSet; import java.util.Objects; +import java.util.Set; @Entity @@ -31,9 +22,21 @@ public class Publisher { private String state; private String zip; + @OneToMany + @JoinColumn(name = "publisher_id") + private Set books = new HashSet<>(); + public Publisher() { } + public Set getBooks() { + return books; + } + + public void setBooks(Set books) { + this.books = books; + } + public Long getId() { return id; } From c11ac1e379886352de58f9223f419b56793a6d6d Mon Sep 17 00:00:00 2001 From: AndrewBergstrom Date: Mon, 27 Feb 2023 22:19:09 -0700 Subject: [PATCH 6/6] added author and books mvc --- .../controllers/AuthorController.java | 23 +++++++++++++++ .../controllers/BookController.java | 23 +++++++++++++++ .../spring5webapp/domain/Author.java | 2 +- .../spring5webapp/domain/Book.java | 2 +- src/main/resources/application.properties | 4 +++ .../resources/templates/authors/list.html | 28 +++++++++++++++++++ src/main/resources/templates/books/list.html | 28 +++++++++++++++++++ 7 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 src/main/java/guru/springframework/spring5webapp/controllers/AuthorController.java create mode 100644 src/main/java/guru/springframework/spring5webapp/controllers/BookController.java create mode 100644 src/main/resources/templates/authors/list.html create mode 100644 src/main/resources/templates/books/list.html diff --git a/src/main/java/guru/springframework/spring5webapp/controllers/AuthorController.java b/src/main/java/guru/springframework/spring5webapp/controllers/AuthorController.java new file mode 100644 index 0000000000..5f383f187f --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/controllers/AuthorController.java @@ -0,0 +1,23 @@ +package guru.springframework.spring5webapp.controllers; + +import guru.springframework.spring5webapp.repositories.AuthorRepository; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class AuthorController { + + private final AuthorRepository authorRepository; + + public AuthorController(AuthorRepository authorRepository) { + this.authorRepository = authorRepository; + } + + @RequestMapping("/authors") + public String getAuthors(Model model){ + + model.addAttribute("authors", authorRepository.findAll()); + return "authors/list"; + } +} diff --git a/src/main/java/guru/springframework/spring5webapp/controllers/BookController.java b/src/main/java/guru/springframework/spring5webapp/controllers/BookController.java new file mode 100644 index 0000000000..b2e7606a33 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/controllers/BookController.java @@ -0,0 +1,23 @@ +package guru.springframework.spring5webapp.controllers; + +import guru.springframework.spring5webapp.repositories.BookRepository; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class BookController { + + private final BookRepository bookRepository; + + public BookController(BookRepository bookRepository) { + this.bookRepository = bookRepository; + } + + @RequestMapping("/books") + public String getBooks(Model model){ + + model.addAttribute("books", bookRepository.findAll()); + return "books/list"; + } +} diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Author.java b/src/main/java/guru/springframework/spring5webapp/domain/Author.java index e2f6e38f8f..e24b24795f 100644 --- a/src/main/java/guru/springframework/spring5webapp/domain/Author.java +++ b/src/main/java/guru/springframework/spring5webapp/domain/Author.java @@ -63,7 +63,7 @@ public String toString() { "id=" + id + ", firstName='" + firstName + '\'' + ", lastName='" + lastName + '\'' + - ", books=" + books + + '}'; } diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Book.java b/src/main/java/guru/springframework/spring5webapp/domain/Book.java index d65522ce36..1653a3195e 100644 --- a/src/main/java/guru/springframework/spring5webapp/domain/Book.java +++ b/src/main/java/guru/springframework/spring5webapp/domain/Book.java @@ -79,7 +79,7 @@ public String toString() { "id=" + id + ", title='" + title + '\'' + ", isbn='" + isbn + '\'' + - ", authors=" + authors + + '}'; } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index e69de29bb2..45f8659c62 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -0,0 +1,4 @@ +spring.h2.console.enabled=true + +spring.datasource.url=jdbc:h2:mem:yourDB + diff --git a/src/main/resources/templates/authors/list.html b/src/main/resources/templates/authors/list.html new file mode 100644 index 0000000000..ff82dd10dc --- /dev/null +++ b/src/main/resources/templates/authors/list.html @@ -0,0 +1,28 @@ + + + + + + + Spring Framework Guru + + + +

Author List

+ + + + + + + + + + + + +
IDFirst NameLast Name
123JoeSmith
+ + + \ No newline at end of file diff --git a/src/main/resources/templates/books/list.html b/src/main/resources/templates/books/list.html new file mode 100644 index 0000000000..0abc8b82ae --- /dev/null +++ b/src/main/resources/templates/books/list.html @@ -0,0 +1,28 @@ + + + + + + + Spring Framework Guru + + + +

Book List

+ + + + + + + + + + + + +
IDTitlePublisher
123Spring in ActionWrox
+ + + \ No newline at end of file