From 92589099952441351a88d4ba62187bf515836993 Mon Sep 17 00:00:00 2001 From: Maryann529 Date: Thu, 3 Nov 2022 19:51:30 +0100 Subject: [PATCH 1/3] A Simple web application --- .../Spring5webappApplication.java | 3 + .../bootstrap/BootStrapData.java | 69 +++++++++++ .../spring5webapp/domain/Author.java | 86 ++++++++++++++ .../spring5webapp/domain/Book.java | 93 +++++++++++++++ .../spring5webapp/domain/Publisher.java | 111 ++++++++++++++++++ .../repositories/AuthorRepository.java | 8 ++ .../repositories/BookRepository.java | 7 ++ .../repositories/PublisherRepository.java | 7 ++ src/main/resources/application.properties | 1 + 9 files changed, 385 insertions(+) create mode 100644 src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.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 create mode 100644 src/main/java/guru/springframework/spring5webapp/domain/Publisher.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 create mode 100644 src/main/java/guru/springframework/spring5webapp/repositories/PublisherRepository.java diff --git a/src/main/java/guru/springframework/spring5webapp/Spring5webappApplication.java b/src/main/java/guru/springframework/spring5webapp/Spring5webappApplication.java index 3d15b925cf..9a4325e77c 100644 --- a/src/main/java/guru/springframework/spring5webapp/Spring5webappApplication.java +++ b/src/main/java/guru/springframework/spring5webapp/Spring5webappApplication.java @@ -1,7 +1,9 @@ package guru.springframework.spring5webapp; +import guru.springframework.spring5webapp.domain.Publisher; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.repository.CrudRepository; @SpringBootApplication public class Spring5webappApplication { @@ -10,3 +12,4 @@ public static void main(String[] args) { SpringApplication.run(Spring5webappApplication.class, args); } } + 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..e7bbef9ca3 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.java @@ -0,0 +1,69 @@ +package guru.springframework.spring5webapp.bootstrap; + +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.BookRepository; +import guru.springframework.spring5webapp.repositories.PublisherRepository; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +@Component +public class BootStrapData implements CommandLineRunner { + + private final AuthorRepository authorRepository; + private final BookRepository bookRepository; + private final PublisherRepository publisherRepository; + + public BootStrapData(AuthorRepository authorRepository, BookRepository bookRepository, PublisherRepository publisherRepository) { + this.authorRepository = authorRepository; + this.bookRepository = bookRepository; + this.publisherRepository = publisherRepository; + } + + @Override + public void run(String... args) throws Exception { + + System.out.println("Started in Bootstrap"); + + Publisher publisher = new Publisher(); + publisher.setName("SFG Publishing"); + publisher.setCity("St Petersury"); + publisher.setState("FL"); + + publisherRepository.save(publisher); + + System.out.println("Publisher Count:" + publisherRepository.count()); + + Author eric = new Author("Eric", "Evans"); + Book ddd = new Book("Domain Driven Design", "123123"); + eric.getBooks().add(ddd); + 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 with EJB", "3939459459"); + 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()); + + } +} + \ No newline at end of file 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..0b82b1740b --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/domain/Author.java @@ -0,0 +1,86 @@ +package guru.springframework.spring5webapp.domain; + +import org.thymeleaf.expression.Bools; + +import javax.persistence.*; +import java.util.HashSet; +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 = new HashSet<>(); + + public Author() { + } + + public Author(String firstName, String lastName) { + this.firstName = firstName; + this.lastName = 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; + } + + 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 + + '}'; + } + + @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..a722decbed --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/domain/Book.java @@ -0,0 +1,93 @@ +package guru.springframework.spring5webapp.domain; + +import javax.persistence.*; +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; + +/** + * Created by May on 31/10/22 + */ +@Entity +public class Book { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + private String title; + private String isbn; + + @ManyToOne + private Publisher publisher; + + @ManyToMany + @JoinTable(name = "author_book", joinColumns = @JoinColumn(name = "book_id"), + inverseJoinColumns = @JoinColumn(name = "author_id")) + private Set authors = new HashSet<>(); + + public Book() { + } + + public Book(String title, String isbn) { + this.title = title; + this.isbn = isbn; + } + + public Publisher getPublisher() { + return publisher; + } + + public void setPublisher(Publisher publisher) { + this.publisher = publisher; + } + + 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 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/domain/Publisher.java b/src/main/java/guru/springframework/spring5webapp/domain/Publisher.java new file mode 100644 index 0000000000..5fe61e863a --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/domain/Publisher.java @@ -0,0 +1,111 @@ +package guru.springframework.spring5webapp.domain; + +import javax.persistence.*; +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; + +@Entity +public class Publisher { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String name; + private String addressLine; + private String city; + 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; + } + + @Override + public String toString() { + return "Publisher{" + + "id=" + id + + ", name='" + name + '\'' + + ", addressLine='" + addressLine + '\'' + + ", 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; + } + + 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 getAddressLine() { + return addressLine; + } + + public void setAddressLine(String addressLine) { + this.addressLine = addressLine; + } + + 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; + } + + +} \ No newline at end of file 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..beaacd8e83 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/repositories/AuthorRepository.java @@ -0,0 +1,8 @@ +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 { +} 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 { +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index e69de29bb2..69b89983cb 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.h2.console.enabled=true \ No newline at end of file From 89fa2b74c53a685fddd18d915c4ec68fe9c1a4ee Mon Sep 17 00:00:00 2001 From: Maryann529 Date: Fri, 4 Nov 2022 20:46:11 +0100 Subject: [PATCH 2/3] spring Boot --- .../controllers/AuthorController.java | 23 ++++++++++++++++++ .../controllers/BookController.java | 24 +++++++++++++++++++ .../spring5webapp/domain/Author.java | 1 - .../spring5webapp/domain/Book.java | 10 +++++++- .../resources/templates/authors/list.html | 23 ++++++++++++++++++ src/main/resources/templates/books/list.html | 23 ++++++++++++++++++ 6 files changed, 102 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..b658d875f3 --- /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..e0b8aa7fc9 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/controllers/BookController.java @@ -0,0 +1,24 @@ +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 "book/list"; + } +} diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Author.java b/src/main/java/guru/springframework/spring5webapp/domain/Author.java index 0b82b1740b..8921bdb870 100644 --- a/src/main/java/guru/springframework/spring5webapp/domain/Author.java +++ b/src/main/java/guru/springframework/spring5webapp/domain/Author.java @@ -65,7 +65,6 @@ 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 a722decbed..9de4ac6d93 100644 --- a/src/main/java/guru/springframework/spring5webapp/domain/Book.java +++ b/src/main/java/guru/springframework/spring5webapp/domain/Book.java @@ -74,7 +74,15 @@ public void setAuthors(Set authors) { } - + @Override + public String toString() { + return "Book{" + + "id=" + id + + ", title='" + title + '\'' + + ", isbn='" + isbn + '\'' + + ", publisher=" + publisher + + '}'; + } @Override public boolean equals(Object o) { diff --git a/src/main/resources/templates/authors/list.html b/src/main/resources/templates/authors/list.html new file mode 100644 index 0000000000..1a08ea39c4 --- /dev/null +++ b/src/main/resources/templates/authors/list.html @@ -0,0 +1,23 @@ + + + + + Spring Framework Guru + + +

Book List

+ + + + + + + + + + + +
IDTitlePublisher
123 Spring in ActionWrox
+ + + \ 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..1a08ea39c4 --- /dev/null +++ b/src/main/resources/templates/books/list.html @@ -0,0 +1,23 @@ + + + + + Spring Framework Guru + + +

Book List

+ + + + + + + + + + + +
IDTitlePublisher
123 Spring in ActionWrox
+ + + \ No newline at end of file From 26762f470600ad1470104306969295082426ea0a Mon Sep 17 00:00:00 2001 From: Maryann529 Date: Sat, 5 Nov 2022 16:54:44 +0100 Subject: [PATCH 3/3] Spring web update --- src/main/resources/application.properties | 2 +- src/main/resources/templates/authors/list.html | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 69b89983cb..0db082b821 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1 @@ -spring.h2.console.enabled=true \ No newline at end of file +spring.h2.console.enabled=true diff --git a/src/main/resources/templates/authors/list.html b/src/main/resources/templates/authors/list.html index 1a08ea39c4..901c3d1d49 100644 --- a/src/main/resources/templates/authors/list.html +++ b/src/main/resources/templates/authors/list.html @@ -9,13 +9,13 @@

Book List

- - + + - - - - + + + +
IDTitlePublisherFirst NameLast Name
123 Spring in ActionWrox
123JoshPrecious