From 7635a7e7f1e0896842430ce2f54edcd06333d49b Mon Sep 17 00:00:00 2001 From: "walieldin.hassan" Date: Fri, 7 Jul 2023 11:53:24 +0200 Subject: [PATCH 01/10] init models --- pom.xml | 6 ++- .../spring5webapp/domin/Author.java | 40 +++++++++++++++++ .../spring5webapp/domin/Book.java | 43 +++++++++++++++++++ 3 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 src/main/java/guru/springframework/spring5webapp/domin/Author.java create mode 100644 src/main/java/guru/springframework/spring5webapp/domin/Book.java diff --git a/pom.xml b/pom.xml index f34c1936df..a1322863d8 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,6 @@ spring5webapp Demo project for Spring Boot - org.springframework.boot spring-boot-starter-parent @@ -33,6 +32,11 @@ org.springframework.boot spring-boot-starter-data-jpa + + commons-logging + commons-logging + 1.1.1 + org.springframework.boot spring-boot-starter-thymeleaf diff --git a/src/main/java/guru/springframework/spring5webapp/domin/Author.java b/src/main/java/guru/springframework/spring5webapp/domin/Author.java new file mode 100644 index 0000000000..a81385cad8 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/domin/Author.java @@ -0,0 +1,40 @@ +package guru.springframework.spring5webapp.domin; + +import java.util.Set; + +public class Author { + private String firstName; + private String lastName; + + private Set books; + + public Author(String firstName, String lastName, Set books) { + this.firstName = firstName; + this.lastName = lastName; + this.books = books; + } + + public Set getBooks() { + return books; + } + + public void setBooks(Set books) { + this.books = books; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } +} diff --git a/src/main/java/guru/springframework/spring5webapp/domin/Book.java b/src/main/java/guru/springframework/spring5webapp/domin/Book.java new file mode 100644 index 0000000000..636dbb5155 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/domin/Book.java @@ -0,0 +1,43 @@ +package guru.springframework.spring5webapp.domin; + +import java.util.Set; + +public class Book { + private String title; + private String isbn; + + private Set authors; +public Book() +{ + +} + public Book(String title, String isbn, Set authors) { + this.title = title; + this.isbn = isbn; + this.authors = authors; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getIsbn() { + return isbn; + } + + public void setIsbn(String isbn) { + this.isbn = isbn; + } + + public Set getAuthors() { + return authors; + } + + public void setAuthors(Set authors) { + this.authors = authors; + } +} From 024e21cfc4e60a2b22b56ce5dfad992902c428aa Mon Sep 17 00:00:00 2001 From: "walieldin.hassan" Date: Fri, 7 Jul 2023 12:04:23 +0200 Subject: [PATCH 02/10] added realtionship --- .../spring5webapp/domin/Author.java | 22 +++++++++++++++++-- .../spring5webapp/domin/Book.java | 19 ++++++++++++++-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/main/java/guru/springframework/spring5webapp/domin/Author.java b/src/main/java/guru/springframework/spring5webapp/domin/Author.java index a81385cad8..4900864557 100644 --- a/src/main/java/guru/springframework/spring5webapp/domin/Author.java +++ b/src/main/java/guru/springframework/spring5webapp/domin/Author.java @@ -1,14 +1,24 @@ package guru.springframework.spring5webapp.domin; +import javax.persistence.*; import java.util.Set; - +@Entity public class Author { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; private String firstName; private String lastName; + @ManyToMany(mappedBy = "authors") private Set books; - public Author(String firstName, String lastName, Set books) { + public Author() + { + + } + public Author(Long id, String firstName, String lastName, Set books) { + this.id = id; this.firstName = firstName; this.lastName = lastName; this.books = books; @@ -37,4 +47,12 @@ public String getLastName() { public void setLastName(String lastName) { this.lastName = lastName; } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } } diff --git a/src/main/java/guru/springframework/spring5webapp/domin/Book.java b/src/main/java/guru/springframework/spring5webapp/domin/Book.java index 636dbb5155..6860bdf866 100644 --- a/src/main/java/guru/springframework/spring5webapp/domin/Book.java +++ b/src/main/java/guru/springframework/spring5webapp/domin/Book.java @@ -1,17 +1,24 @@ package guru.springframework.spring5webapp.domin; +import javax.persistence.*; import java.util.Set; - +@Entity public class Book { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id ; private String title; private String isbn; + @ManyToMany + @JoinTable(name = "author_book",joinColumns =@JoinColumn(name = "book_id"),inverseJoinColumns = @JoinColumn(name = "author_id")) private Set authors; public Book() { } - public Book(String title, String isbn, Set authors) { + public Book(Long id, String title, String isbn, Set authors) { + this.id = id; this.title = title; this.isbn = isbn; this.authors = authors; @@ -40,4 +47,12 @@ public Set getAuthors() { public void setAuthors(Set authors) { this.authors = authors; } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } } From 8fc878b55d762dc6e2937c563aeab1104df2c214 Mon Sep 17 00:00:00 2001 From: "walieldin.hassan" Date: Fri, 7 Jul 2023 12:22:51 +0200 Subject: [PATCH 03/10] added hash code and equals methods --- .../spring5webapp/domin/Author.java | 14 ++++++++++++++ .../springframework/spring5webapp/domin/Book.java | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/main/java/guru/springframework/spring5webapp/domin/Author.java b/src/main/java/guru/springframework/spring5webapp/domin/Author.java index 4900864557..d4dcbe0520 100644 --- a/src/main/java/guru/springframework/spring5webapp/domin/Author.java +++ b/src/main/java/guru/springframework/spring5webapp/domin/Author.java @@ -1,6 +1,7 @@ package guru.springframework.spring5webapp.domin; import javax.persistence.*; +import java.util.Objects; import java.util.Set; @Entity public class Author { @@ -55,4 +56,17 @@ public Long getId() { public void setId(Long id) { this.id = id; } + + @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 Objects.hash(id); + } } diff --git a/src/main/java/guru/springframework/spring5webapp/domin/Book.java b/src/main/java/guru/springframework/spring5webapp/domin/Book.java index 6860bdf866..291e1ae19c 100644 --- a/src/main/java/guru/springframework/spring5webapp/domin/Book.java +++ b/src/main/java/guru/springframework/spring5webapp/domin/Book.java @@ -1,6 +1,7 @@ package guru.springframework.spring5webapp.domin; import javax.persistence.*; +import java.util.Objects; import java.util.Set; @Entity public class Book { @@ -55,4 +56,17 @@ public Long getId() { public void setId(Long id) { this.id = id; } + + @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); + } } From 770199c0c1cb2e6ec6832c41c102be7ccd40a64e Mon Sep 17 00:00:00 2001 From: "walieldin.hassan" Date: Fri, 7 Jul 2023 12:29:42 +0200 Subject: [PATCH 04/10] added TO string methods --- .../springframework/spring5webapp/domin/Author.java | 10 +++++++++- .../springframework/spring5webapp/domin/Book.java | 11 +++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/guru/springframework/spring5webapp/domin/Author.java b/src/main/java/guru/springframework/spring5webapp/domin/Author.java index d4dcbe0520..0d8596e8cb 100644 --- a/src/main/java/guru/springframework/spring5webapp/domin/Author.java +++ b/src/main/java/guru/springframework/spring5webapp/domin/Author.java @@ -56,7 +56,15 @@ public Long getId() { public void setId(Long id) { this.id = id; } - + @Override + public String toString() { + return "Book{" + + "id=" + id + + ", firstName='" + firstName + '\'' + + ", lastName='" + lastName + '\'' + + ", books=" + books + + '}'; + } @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/main/java/guru/springframework/spring5webapp/domin/Book.java b/src/main/java/guru/springframework/spring5webapp/domin/Book.java index 291e1ae19c..a1052e4e06 100644 --- a/src/main/java/guru/springframework/spring5webapp/domin/Book.java +++ b/src/main/java/guru/springframework/spring5webapp/domin/Book.java @@ -57,6 +57,17 @@ public void setId(Long id) { this.id = id; } + + @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; From c470590a10ee58849654d07dd66ab6e29d8bf7cd Mon Sep 17 00:00:00 2001 From: "walieldin.hassan" Date: Fri, 7 Jul 2023 15:10:26 +0200 Subject: [PATCH 05/10] added publisher model --- .../bootstrap/bootstrapData.java | 49 ++++++++ .../spring5webapp/domin/Author.java | 8 +- .../spring5webapp/domin/Book.java | 8 +- .../spring5webapp/domin/Publisher.java | 105 ++++++++++++++++++ .../repositories/AuthorRepository.java | 7 ++ .../repositories/BookRepository.java | 8 ++ 6 files changed, 177 insertions(+), 8 deletions(-) create mode 100644 src/main/java/guru/springframework/spring5webapp/bootstrap/bootstrapData.java create mode 100644 src/main/java/guru/springframework/spring5webapp/domin/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 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..dcedd44297 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/bootstrap/bootstrapData.java @@ -0,0 +1,49 @@ +package guru.springframework.spring5webapp.bootstrap; + +import guru.springframework.spring5webapp.domin.Author; +import guru.springframework.spring5webapp.domin.Book; +import guru.springframework.spring5webapp.repositories.AuthorRepository; +import guru.springframework.spring5webapp.repositories.BookRepository; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +@Component +public class bootstrapData implements CommandLineRunner { + private final AuthorRepository authorRepository; + private final BookRepository bookRepository; + + public bootstrapData(AuthorRepository authorRepository, BookRepository bookRepository) { + this.authorRepository = authorRepository; + this.bookRepository = bookRepository; + } + + @Override + public void run(String... args) throws Exception { + // init the data in the construct + + //example 1 + Author wali=new Author("wali","hassan"); + Book home=new Book("home sweet home","121212"); + + //example2 + Author ali=new Author("ali","omer"); + Book lorem=new Book("lorem apsum","14444"); + + // add data to database h2 + + wali.getBooks().add(home); + home.getAuthors().add(wali); + authorRepository.save(wali); + bookRepository.save(home); + + ali.getBooks().add(lorem); + lorem.getAuthors().add(ali); + authorRepository.save(ali); + bookRepository.save(lorem); + + System.out.println("Started in Bootstrap"); + System.out.println("Number of Books is :"+ " "+ bookRepository.count()); + System.out.println("Number of Authors is :"+ " "+ authorRepository.count()); + + } +} diff --git a/src/main/java/guru/springframework/spring5webapp/domin/Author.java b/src/main/java/guru/springframework/spring5webapp/domin/Author.java index 0d8596e8cb..a6f572d61b 100644 --- a/src/main/java/guru/springframework/spring5webapp/domin/Author.java +++ b/src/main/java/guru/springframework/spring5webapp/domin/Author.java @@ -1,6 +1,7 @@ package guru.springframework.spring5webapp.domin; import javax.persistence.*; +import java.util.HashSet; import java.util.Objects; import java.util.Set; @Entity @@ -12,17 +13,16 @@ public class Author { private String lastName; @ManyToMany(mappedBy = "authors") - private Set books; + private Set books=new HashSet<>(); public Author() { } - public Author(Long id, String firstName, String lastName, Set books) { - this.id = id; + public Author( String firstName, String lastName) { + this.firstName = firstName; this.lastName = lastName; - this.books = books; } public Set getBooks() { diff --git a/src/main/java/guru/springframework/spring5webapp/domin/Book.java b/src/main/java/guru/springframework/spring5webapp/domin/Book.java index a1052e4e06..7577e82ea4 100644 --- a/src/main/java/guru/springframework/spring5webapp/domin/Book.java +++ b/src/main/java/guru/springframework/spring5webapp/domin/Book.java @@ -1,6 +1,7 @@ package guru.springframework.spring5webapp.domin; import javax.persistence.*; +import java.util.HashSet; import java.util.Objects; import java.util.Set; @Entity @@ -13,16 +14,15 @@ 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(Long id, String title, String isbn, Set authors) { - this.id = id; + public Book( String title, String isbn) { + this.title = title; this.isbn = isbn; - this.authors = authors; } public String getTitle() { diff --git a/src/main/java/guru/springframework/spring5webapp/domin/Publisher.java b/src/main/java/guru/springframework/spring5webapp/domin/Publisher.java new file mode 100644 index 0000000000..2fa623626c --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/domin/Publisher.java @@ -0,0 +1,105 @@ +package guru.springframework.spring5webapp.domin; + +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) + private Long id; + private String name; + + private String addressLine; + private String city; + private String state; + private String zip; + + public Publisher(String name, String addressLine, String city, String state, String zip) + { + this.name = name; + this.addressLine = addressLine; + + this.city = city; + this.state = state; + this.zip = zip; + } + + @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 Objects.hash(id); + } + + 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; + } +} + 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..f1cc118f60 --- /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.domin.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..cc9ec732d7 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/repositories/BookRepository.java @@ -0,0 +1,8 @@ +package guru.springframework.spring5webapp.repositories; + +import guru.springframework.spring5webapp.domin.Book; +import org.springframework.data.repository.CrudRepository; + +public interface BookRepository extends CrudRepository { + +} From ee9b9d160fc217168777cd86d2cca5e74d638471 Mon Sep 17 00:00:00 2001 From: "walieldin.hassan" Date: Fri, 7 Jul 2023 15:55:42 +0200 Subject: [PATCH 06/10] wip --- .../bootstrap/BootStrapData.java | 69 +++++++++++++++++++ .../bootstrap/bootstrapData.java | 49 ------------- .../{domin => domain}/Author.java | 2 +- .../spring5webapp/{domin => domain}/Book.java | 63 ++++++++++------- .../{domin => domain}/Publisher.java | 61 ++++++++-------- .../repositories/AuthorRepository.java | 2 +- .../repositories/BookRepository.java | 2 +- .../repositories/PublisherRepository.java | 7 ++ src/main/resources/application.properties | 1 + 9 files changed, 154 insertions(+), 102 deletions(-) create mode 100644 src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.java delete mode 100644 src/main/java/guru/springframework/spring5webapp/bootstrap/bootstrapData.java rename src/main/java/guru/springframework/spring5webapp/{domin => domain}/Author.java (97%) rename src/main/java/guru/springframework/spring5webapp/{domin => domain}/Book.java (62%) rename src/main/java/guru/springframework/spring5webapp/{domin => domain}/Publisher.java (59%) 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..65bd170a78 --- /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; + +/** + * Created by wali eldin on 12/23/19. + */ +@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 Petersburg"); + 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 without 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().size()); + } +} \ No newline at end of file diff --git a/src/main/java/guru/springframework/spring5webapp/bootstrap/bootstrapData.java b/src/main/java/guru/springframework/spring5webapp/bootstrap/bootstrapData.java deleted file mode 100644 index dcedd44297..0000000000 --- a/src/main/java/guru/springframework/spring5webapp/bootstrap/bootstrapData.java +++ /dev/null @@ -1,49 +0,0 @@ -package guru.springframework.spring5webapp.bootstrap; - -import guru.springframework.spring5webapp.domin.Author; -import guru.springframework.spring5webapp.domin.Book; -import guru.springframework.spring5webapp.repositories.AuthorRepository; -import guru.springframework.spring5webapp.repositories.BookRepository; -import org.springframework.boot.CommandLineRunner; -import org.springframework.stereotype.Component; - -@Component -public class bootstrapData implements CommandLineRunner { - private final AuthorRepository authorRepository; - private final BookRepository bookRepository; - - public bootstrapData(AuthorRepository authorRepository, BookRepository bookRepository) { - this.authorRepository = authorRepository; - this.bookRepository = bookRepository; - } - - @Override - public void run(String... args) throws Exception { - // init the data in the construct - - //example 1 - Author wali=new Author("wali","hassan"); - Book home=new Book("home sweet home","121212"); - - //example2 - Author ali=new Author("ali","omer"); - Book lorem=new Book("lorem apsum","14444"); - - // add data to database h2 - - wali.getBooks().add(home); - home.getAuthors().add(wali); - authorRepository.save(wali); - bookRepository.save(home); - - ali.getBooks().add(lorem); - lorem.getAuthors().add(ali); - authorRepository.save(ali); - bookRepository.save(lorem); - - System.out.println("Started in Bootstrap"); - System.out.println("Number of Books is :"+ " "+ bookRepository.count()); - System.out.println("Number of Authors is :"+ " "+ authorRepository.count()); - - } -} diff --git a/src/main/java/guru/springframework/spring5webapp/domin/Author.java b/src/main/java/guru/springframework/spring5webapp/domain/Author.java similarity index 97% rename from src/main/java/guru/springframework/spring5webapp/domin/Author.java rename to src/main/java/guru/springframework/spring5webapp/domain/Author.java index a6f572d61b..f3bdfb8c98 100644 --- a/src/main/java/guru/springframework/spring5webapp/domin/Author.java +++ b/src/main/java/guru/springframework/spring5webapp/domain/Author.java @@ -1,4 +1,4 @@ -package guru.springframework.spring5webapp.domin; +package guru.springframework.spring5webapp.domain; import javax.persistence.*; import java.util.HashSet; diff --git a/src/main/java/guru/springframework/spring5webapp/domin/Book.java b/src/main/java/guru/springframework/spring5webapp/domain/Book.java similarity index 62% rename from src/main/java/guru/springframework/spring5webapp/domin/Book.java rename to src/main/java/guru/springframework/spring5webapp/domain/Book.java index 7577e82ea4..5caf485f78 100644 --- a/src/main/java/guru/springframework/spring5webapp/domin/Book.java +++ b/src/main/java/guru/springframework/spring5webapp/domain/Book.java @@ -1,30 +1,54 @@ -package guru.springframework.spring5webapp.domin; +package guru.springframework.spring5webapp.domain; import javax.persistence.*; import java.util.HashSet; -import java.util.Objects; import java.util.Set; + +/** + * Created by wali eldin on 12/22/19. + */ @Entity public class Book { + @Id @GeneratedValue(strategy = GenerationType.AUTO) - private Long id ; - private String title; - private String isbn; + 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() -{ + @JoinTable(name = "author_book", joinColumns = @JoinColumn(name = "book_id"), + inverseJoinColumns = @JoinColumn(name = "author_id")) + private Set authors = new HashSet<>(); -} - public Book( String title, String isbn) { + 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; } @@ -49,15 +73,6 @@ public void setAuthors(Set authors) { this.authors = authors; } - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - @Override public String toString() { return "Book{" + @@ -72,12 +87,14 @@ public String toString() { 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); + + return id != null ? id.equals(book.id) : book.id == null; } @Override public int hashCode() { - return Objects.hash(id); + return id != null ? id.hashCode() : 0; } -} +} \ No newline at end of file diff --git a/src/main/java/guru/springframework/spring5webapp/domin/Publisher.java b/src/main/java/guru/springframework/spring5webapp/domain/Publisher.java similarity index 59% rename from src/main/java/guru/springframework/spring5webapp/domin/Publisher.java rename to src/main/java/guru/springframework/spring5webapp/domain/Publisher.java index 2fa623626c..0e8d2d6da1 100644 --- a/src/main/java/guru/springframework/spring5webapp/domin/Publisher.java +++ b/src/main/java/guru/springframework/spring5webapp/domain/Publisher.java @@ -1,32 +1,38 @@ -package guru.springframework.spring5webapp.domin; +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; +import javax.persistence.*; +import java.util.HashSet; +import java.util.Set; +/** + * Created by wali eldin on 12/23/19. + */ @Entity public class Publisher { @Id @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; - private String name; + private Long id; - private String addressLine; + private String name; + private String addressLine1; private String city; - private String state; - private String zip; + private String state; + private String zip; - public Publisher(String name, String addressLine, String city, String state, String zip) - { - this.name = name; - this.addressLine = addressLine; + @OneToMany + @JoinColumn(name = "publisher_id") + private Set books = new HashSet<>(); - this.city = city; - this.state = state; - this.zip = zip; + public Publisher() { + } + + public Set getBooks() { + return books; + } + + public void setBooks(Set books) { + this.books = books; } @Override @@ -34,7 +40,7 @@ public String toString() { return "Publisher{" + "id=" + id + ", name='" + name + '\'' + - ", addressLine='" + addressLine + '\'' + + ", addressLine1='" + addressLine1 + '\'' + ", city='" + city + '\'' + ", state='" + state + '\'' + ", zip='" + zip + '\'' + @@ -45,13 +51,15 @@ public String toString() { 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); + + return id != null ? id.equals(publisher.id) : publisher.id == null; } @Override public int hashCode() { - return Objects.hash(id); + return id != null ? id.hashCode() : 0; } public Long getId() { @@ -70,12 +78,12 @@ public void setName(String name) { this.name = name; } - public String getAddressLine() { - return addressLine; + public String getAddressLine1() { + return addressLine1; } - public void setAddressLine(String addressLine) { - this.addressLine = addressLine; + public void setAddressLine1(String addressLine1) { + this.addressLine1 = addressLine1; } public String getCity() { @@ -101,5 +109,4 @@ public String getZip() { 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 index f1cc118f60..7d23a341e6 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.domin.Author; +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 index cc9ec732d7..0653770ae2 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.domin.Book; +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..f091a8125c --- /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..858f4069ed 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 34ed2b18a756ec33aa18056ba3524186329c3fb1 Mon Sep 17 00:00:00 2001 From: "walieldin.hassan" Date: Fri, 7 Jul 2023 15:59:33 +0200 Subject: [PATCH 07/10] added config for h2 console --- src/main/resources/application.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 858f4069ed..453dd1099b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1,2 @@ -#spring.h2.console.enabled=true \ No newline at end of file +#spring.h2.console.enabled=true +spring.h2.console.enabled=true \ No newline at end of file From b2642efe3c414e61f6e1d73a43441e5730006b58 Mon Sep 17 00:00:00 2001 From: "walieldin.hassan" Date: Fri, 7 Jul 2023 19:07:58 +0200 Subject: [PATCH 08/10] added config for h2 database --- src/main/resources/application.properties | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 453dd1099b..060db1e9ad 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,2 +1,6 @@ -#spring.h2.console.enabled=true -spring.h2.console.enabled=true \ No newline at end of file +spring.h2.console.enabled=true +spring.datasource.url=jdbc:h2:mem:dcbapp +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.username=sa +spring.datasource.password=password +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect \ No newline at end of file From c6188220f9644fa38bcb15b8618b4ab82dbb734c Mon Sep 17 00:00:00 2001 From: "walieldin.hassan" Date: Fri, 7 Jul 2023 19:27:05 +0200 Subject: [PATCH 09/10] added books controller --- .../controllers/BookController.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/guru/springframework/spring5webapp/controllers/BookController.java 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..dda7900c79 --- /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 index (Model model) + { + model.addAttribute("books",bookRepository.findAll()); + return "Books"; + } +} From 4c5b21b227906ff5bd3fbf0a53fe080333ecfeca Mon Sep 17 00:00:00 2001 From: "walieldin.hassan" Date: Sat, 8 Jul 2023 11:01:26 +0200 Subject: [PATCH 10/10] return book view with data --- .../controllers/BookController.java | 2 +- src/main/resources/templates/books/list.html | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/templates/books/list.html diff --git a/src/main/java/guru/springframework/spring5webapp/controllers/BookController.java b/src/main/java/guru/springframework/spring5webapp/controllers/BookController.java index dda7900c79..64181e8217 100644 --- a/src/main/java/guru/springframework/spring5webapp/controllers/BookController.java +++ b/src/main/java/guru/springframework/spring5webapp/controllers/BookController.java @@ -18,6 +18,6 @@ public BookController(BookRepository bookRepository) { public String index (Model model) { model.addAttribute("books",bookRepository.findAll()); - return "Books"; + return "books/list"; } } diff --git a/src/main/resources/templates/books/list.html b/src/main/resources/templates/books/list.html new file mode 100644 index 0000000000..95995bb411 --- /dev/null +++ b/src/main/resources/templates/books/list.html @@ -0,0 +1,24 @@ + + + + + Book List + + +

Book List

+ + + + + + + + + + + + + +
IDTitlePublisher
123 springwali
+ + \ No newline at end of file