diff --git a/pom.xml b/pom.xml index f34c1936df..31af7e8176 100644 --- a/pom.xml +++ b/pom.xml @@ -42,6 +42,7 @@ spring-boot-starter-web + com.h2database h2 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..adaee0e84f --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/bootstrap/BootStrapData.java @@ -0,0 +1,70 @@ +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 a 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","12345"); + eric.getBooks().add(ddd); + ddd.getAuthors().add(eric); + + //miután beállítottuk a Book és a PUblisher közötti sok-egy kapcsolatot, és Joincolumnot is beállítottuk + ddd.setPublisher(publisher); + publisher.getBooks().add(ddd); + + + authorRepository.save(eric); + bookRepository.save(ddd); + publisherRepository.save(publisher); + + + Author lewis= new Author("C.S","Lewis"); + Book sbj= new Book("Suprised by joy","12347"); + lewis.getBooks().add(sbj); + sbj.getAuthors().add(lewis); + + sbj.setPublisher(publisher); + publisher.getBooks().add(sbj); + +// fontos a mentési sorrend ha 'publisherRepository.save(publisher);' feljebb van nem működik + authorRepository.save(lewis); + bookRepository.save(sbj); + 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/controllers/BookController.java b/src/main/java/guru/springframework/spring5webapp/controllers/BookController.java new file mode 100644 index 0000000000..a6ba582585 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/controllers/BookController.java @@ -0,0 +1,29 @@ +package guru.springframework.spring5webapp.controllers; + +// Spring MVC 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"; + } + + +} 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..e8b771b15a --- /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.HashSet; +import java.util.Set; +@Entity +public class Author { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) //automatikus id generálás (mint az adatb-ban) + 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 id != null ? id.equals(author.id) : author.id == null; + } + + @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..24855283a4 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/domain/Book.java @@ -0,0 +1,98 @@ +package guru.springframework.spring5webapp.domain; + +import javax.persistence.*; + +import java.util.HashSet; +import java.util.Set; + +@Entity +public class Book { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String title; + private String isbn; + @ManyToOne // sok könyv lehet, de egy könyvhöz csak egy kiadó tartozik + 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 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 id != null ? id.equals(book.id) : book.id == null; + } + + @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..c9c7313e53 --- /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.Set; + +// POJO and annotating it as a JPA entitity +@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 // = publisher is one, and it has many books + @JoinColumn(name = "publisher_id") + //mivel egy könyvnek csak 1 kiadója lehet, viszont a kiadónak sok könyve, ezért beállítjuk a egy többhöz kapcsolatot + 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 + '\'' + + ", addressLine1='" + addressLine1 + '\'' + + ", city='" + city + '\'' + + ", state='" + state + '\'' + + ", zip='" + zip + '\'' + + '}'; + } + + 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 boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Publisher publisher = (Publisher) o; + + return id != null ? id.equals(publisher.id) : publisher.id == null; + } + + @Override + public int hashCode() { + return id != null ? id.hashCode() : 0; + } +} diff --git a/src/main/java/guru/springframework/spring5webapp/repositories/AuthorRepository.java b/src/main/java/guru/springframework/spring5webapp/repositories/AuthorRepository.java new file mode 100644 index 0000000000..7722821305 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/repositories/AuthorRepository.java @@ -0,0 +1,9 @@ +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..f923af1e04 --- /dev/null +++ b/src/main/java/guru/springframework/spring5webapp/repositories/PublisherRepository.java @@ -0,0 +1,8 @@ +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..8b13789179 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -0,0 +1 @@ +