From 2a8c056881fe57b0ff2f9cc364dc87158a280dae Mon Sep 17 00:00:00 2001 From: Ahmed laazouzi Date: Tue, 10 Jan 2023 10:10:59 -0500 Subject: [PATCH 1/3] spring boot h2-console --- .../bootstrap/BootStrapData.java | 61 ++++++++++ .../spring5webapp/domain/Author.java | 80 +++++++++++++ .../spring5webapp/domain/Book.java | 92 ++++++++++++++ .../spring5webapp/domain/Publisher.java | 113 ++++++++++++++++++ .../repositories/AuthorRepository.java | 7 ++ .../repositories/BookRepository.java | 7 ++ .../repositories/PublisherRepository.java | 7 ++ src/main/resources/application.properties | 1 + 8 files changed, 368 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/bootstrap/BootStrapData.java b/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.java new file mode 100644 index 0000000000..a0861f06ce --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.java @@ -0,0 +1,61 @@ +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 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 { + Author author1 = new Author("Ahmed", "Yamir"); + Book book1 = new Book("Spring boot", "12QS"); + + author1.getBooks().add(book1); + book1.getAuthors().add(author1); + + authorRepository.save(author1); + bookRepository.save(book1); + + Author author2 = new Author("Taha", "Salhi"); + Book book2 = new Book("C++", "AZ321GFF"); + + author2.getBooks().add(book2); + book2.getAuthors().add(author2); + + authorRepository.save(author2); + bookRepository.save(book2); + + + + Publisher publisger=new Publisher("Publisger 1","AddressL1","Ottawa","Ontario","K3E 6T9"); + book1.setPublisher(publisger); + publisger.getBooks().add(book1); + + book2.setPublisher(publisger); + publisger.getBooks().add(book2); + + publisherRepository.save(publisger); + + System.out.println("Number of book here: " + bookRepository.count()); + System.out.println("Number of author here: " + authorRepository.count()); + System.out.println("Number of publisher here: " + publisherRepository.count()); + + } +} 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..bcbe7f9801 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/domain/Author.java @@ -0,0 +1,80 @@ +package guru.springframework.spring5webapp.domain; + +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 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) && Objects.equals(firstName, author.firstName) && Objects.equals(lastName, author.lastName) && Objects.equals(books, author.books); + } + + @Override + public int hashCode() { + return Objects.hash(id); + } + + @Override + public String toString() { + return "Author{" + + "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 new file mode 100644 index 0000000000..8f6cbacee7 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/domain/Book.java @@ -0,0 +1,92 @@ +package guru.springframework.spring5webapp.domain; + +import javax.persistence.*; +import java.util.HashSet; +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; + @ManyToOne + private Publisher publisher; + + public Publisher getPublisher() { + return publisher; + } + + public void setPublisher(Publisher publisher) { + this.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 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 Objects.hash(id); + } + + @Override + public String toString() { + return "Book{" + + "id=" + id + + ", title='" + title + '\'' + + ", isbn='" + isbn + '\'' + + ", authors=" + authors + + '}'; + } +} 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..1a4774f12e --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/domain/Publisher.java @@ -0,0 +1,113 @@ +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 AddressLine1; + private String city; + private String state; + private String zip; + @OneToMany + @JoinColumn(name="publisher_id") + private Set books=new HashSet<>(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Set getBooks() { + return books; + } + + public void setBooks(Set books) { + this.books = books; + } + + public Publisher() { + } + + public Publisher(String name, String addressLine1, String city, String state, String zip) { + this.name = name; + AddressLine1 = addressLine1; + this.city = city; + this.state = state; + this.zip = zip; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAddressLine1() { + return AddressLine1; + } + + public void setAddressLine1(String addressLine1) { + 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 boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Publisher publisher = (Publisher) o; + return Objects.equals(name, publisher.name) && Objects.equals(AddressLine1, publisher.AddressLine1) && Objects.equals(city, publisher.city) && Objects.equals(state, publisher.state) && Objects.equals(zip, publisher.zip); + } + + @Override + public int hashCode() { + return Objects.hash(name, AddressLine1, city, state, zip); + } + + @Override + public String toString() { + return "Puplisher{" + + "name='" + name + '\'' + + ", AddressLine1='" + AddressLine1 + '\'' + + ", city='" + city + '\'' + + ", state='" + state + '\'' + + ", zip='" + zip + '\'' + + '}'; + } +} 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..0e4f90ab47 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/repositories/AuthorRepository.java @@ -0,0 +1,7 @@ +package guru.springframework.spring5webapp.repositories; + +import guru.springframework.spring5webapp.domain.Author; +import org.springframework.data.repository.CrudRepository; + +public interface AuthorRepository extends CrudRepository { +} diff --git a/src/main/java/guru/springframework/spring5webapp/repositories/BookRepository.java b/src/main/java/guru/springframework/spring5webapp/repositories/BookRepository.java new file mode 100644 index 0000000000..888eb68add --- /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..ca1768c692 --- /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 45e35bbd79dcf92010bb61792b77a44a56127d79 Mon Sep 17 00:00:00 2001 From: Ahmed laazouzi Date: Tue, 10 Jan 2023 15:34:10 -0500 Subject: [PATCH 2/3] second commit --- .../bootstrap/BootStrapData.java | 6 ++--- .../controllers/BookControllers.java | 22 +++++++++++++++++++ .../{domain => model}/Author.java | 2 +- .../spring5webapp/{domain => model}/Book.java | 2 +- .../{domain => model}/Publisher.java | 2 +- .../repositories/AuthorRepository.java | 2 +- .../repositories/BookRepository.java | 2 +- .../repositories/PublisherRepository.java | 2 +- src/main/resources/templates/books/list.html | 22 +++++++++++++++++++ 9 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 src/main/java/guru/springframework/spring5webapp/controllers/BookControllers.java rename src/main/java/guru/springframework/spring5webapp/{domain => model}/Author.java (97%) rename src/main/java/guru/springframework/spring5webapp/{domain => model}/Book.java (97%) rename src/main/java/guru/springframework/spring5webapp/{domain => model}/Publisher.java (98%) create mode 100644 src/main/resources/templates/books/list.html diff --git a/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.java b/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.java index a0861f06ce..293c21c88a 100644 --- a/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.java +++ b/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.java @@ -1,8 +1,8 @@ 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.model.Author; +import guru.springframework.spring5webapp.model.Book; +import guru.springframework.spring5webapp.model.Publisher; import guru.springframework.spring5webapp.repositories.AuthorRepository; import guru.springframework.spring5webapp.repositories.BookRepository; import guru.springframework.spring5webapp.repositories.PublisherRepository; diff --git a/src/main/java/guru/springframework/spring5webapp/controllers/BookControllers.java b/src/main/java/guru/springframework/spring5webapp/controllers/BookControllers.java new file mode 100644 index 0000000000..38ad4276f8 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/controllers/BookControllers.java @@ -0,0 +1,22 @@ +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 BookControllers { + + private final BookRepository bookRepository; + + public BookControllers(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/model/Author.java similarity index 97% rename from src/main/java/guru/springframework/spring5webapp/domain/Author.java rename to src/main/java/guru/springframework/spring5webapp/model/Author.java index bcbe7f9801..5fa268c97e 100644 --- a/src/main/java/guru/springframework/spring5webapp/domain/Author.java +++ b/src/main/java/guru/springframework/spring5webapp/model/Author.java @@ -1,4 +1,4 @@ -package guru.springframework.spring5webapp.domain; +package guru.springframework.spring5webapp.model; import javax.persistence.*; import java.util.HashSet; diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Book.java b/src/main/java/guru/springframework/spring5webapp/model/Book.java similarity index 97% rename from src/main/java/guru/springframework/spring5webapp/domain/Book.java rename to src/main/java/guru/springframework/spring5webapp/model/Book.java index 8f6cbacee7..d985b3c77e 100644 --- a/src/main/java/guru/springframework/spring5webapp/domain/Book.java +++ b/src/main/java/guru/springframework/spring5webapp/model/Book.java @@ -1,4 +1,4 @@ -package guru.springframework.spring5webapp.domain; +package guru.springframework.spring5webapp.model; import javax.persistence.*; import java.util.HashSet; diff --git a/src/main/java/guru/springframework/spring5webapp/domain/Publisher.java b/src/main/java/guru/springframework/spring5webapp/model/Publisher.java similarity index 98% rename from src/main/java/guru/springframework/spring5webapp/domain/Publisher.java rename to src/main/java/guru/springframework/spring5webapp/model/Publisher.java index 1a4774f12e..fdf92a3653 100644 --- a/src/main/java/guru/springframework/spring5webapp/domain/Publisher.java +++ b/src/main/java/guru/springframework/spring5webapp/model/Publisher.java @@ -1,4 +1,4 @@ -package guru.springframework.spring5webapp.domain; +package guru.springframework.spring5webapp.model; import javax.persistence.*; import java.util.HashSet; diff --git a/src/main/java/guru/springframework/spring5webapp/repositories/AuthorRepository.java b/src/main/java/guru/springframework/spring5webapp/repositories/AuthorRepository.java index 0e4f90ab47..364f1cd8fb 100644 --- a/src/main/java/guru/springframework/spring5webapp/repositories/AuthorRepository.java +++ b/src/main/java/guru/springframework/spring5webapp/repositories/AuthorRepository.java @@ -1,6 +1,6 @@ package guru.springframework.spring5webapp.repositories; -import guru.springframework.spring5webapp.domain.Author; +import guru.springframework.spring5webapp.model.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 index 888eb68add..9c21f0270f 100644 --- a/src/main/java/guru/springframework/spring5webapp/repositories/BookRepository.java +++ b/src/main/java/guru/springframework/spring5webapp/repositories/BookRepository.java @@ -1,6 +1,6 @@ package guru.springframework.spring5webapp.repositories; -import guru.springframework.spring5webapp.domain.Book; +import guru.springframework.spring5webapp.model.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 index ca1768c692..332f7f01b5 100644 --- a/src/main/java/guru/springframework/spring5webapp/repositories/PublisherRepository.java +++ b/src/main/java/guru/springframework/spring5webapp/repositories/PublisherRepository.java @@ -1,6 +1,6 @@ package guru.springframework.spring5webapp.repositories; -import guru.springframework.spring5webapp.domain.Publisher; +import guru.springframework.spring5webapp.model.Publisher; import org.springframework.data.repository.CrudRepository; public interface PublisherRepository extends CrudRepository { diff --git a/src/main/resources/templates/books/list.html b/src/main/resources/templates/books/list.html new file mode 100644 index 0000000000..5ff460e95c --- /dev/null +++ b/src/main/resources/templates/books/list.html @@ -0,0 +1,22 @@ + + + + + Title + + +

List of book

+ + + + + + + + + + + +
IDTitlePublisher
+ + \ No newline at end of file From 0b952ec0f933663ef280d7cd48094bbf67301c3a Mon Sep 17 00:00:00 2001 From: Ahmed laazouzi Date: Wed, 11 Jan 2023 09:38:25 -0500 Subject: [PATCH 3/3] add author controller --- .../bootstrap/AuthorController.java | 20 +++++++++++++++++ .../templates/authors/authorsList.html | 22 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 src/main/java/guru/springframework/spring5webapp/bootstrap/AuthorController.java create mode 100644 src/main/resources/templates/authors/authorsList.html diff --git a/src/main/java/guru/springframework/spring5webapp/bootstrap/AuthorController.java b/src/main/java/guru/springframework/spring5webapp/bootstrap/AuthorController.java new file mode 100644 index 0000000000..b328db9170 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/bootstrap/AuthorController.java @@ -0,0 +1,20 @@ +package guru.springframework.spring5webapp.bootstrap; + +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/authorsList"; + } +} diff --git a/src/main/resources/templates/authors/authorsList.html b/src/main/resources/templates/authors/authorsList.html new file mode 100644 index 0000000000..43c37e4e54 --- /dev/null +++ b/src/main/resources/templates/authors/authorsList.html @@ -0,0 +1,22 @@ + + + + + Title + + +

List of authors

+ + + + + + + + + + + +
IDFirstNameLastName
+ + \ No newline at end of file