Skip to content

Database set up. Working on MVC for UI now #287

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
package guru.springframework.spring5webapp.bootstrap;
import guru.springframework.spring5webapp.domain.Director;
import guru.springframework.spring5webapp.domain.Movie;
import guru.springframework.spring5webapp.domain.Studio;
import guru.springframework.spring5webapp.repositories.DirectorRepository;
import guru.springframework.spring5webapp.repositories.MovieRepository;
import guru.springframework.spring5webapp.repositories.StudioRepository;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class BootstrapData implements CommandLineRunner { //confused by syntax
private final DirectorRepository directorRepository;
private final MovieRepository movieRepository;
private final StudioRepository studioRepository;

public BootstrapData(DirectorRepository directorRepository, MovieRepository movieRepository, StudioRepository studioRepository) {
this.directorRepository = directorRepository;
this.movieRepository = movieRepository;
this.studioRepository = studioRepository;
}

@Override //confused by @Override need
public void run(String... args) throws Exception {

System.out.println("Started in Bootstrap");

Studio cp = new Studio();
cp.setName("Columbia Pictures");
cp.setCity("Culver City");
cp.setState("California");
studioRepository.save(cp);

Studio ap = new Studio();
ap.setName("Annapurna Pictures");
ap.setCity("Los Angeles");
ap.setState("California");
studioRepository.save(ap);

Studio pp = new Studio();
pp.setName("Paramount Pictures");
pp.setCity("Hollywood");
pp.setState("California");
studioRepository.save(pp);

Studio up = new Studio();
up.setName("Universal Pictures");
up.setCity("Universal City");
up.setState("California");
studioRepository.save(up);

Studio wb = new Studio();
wb.setName("Warner Bros");
wb.setCity("Burbank");
wb.setState("California");
studioRepository.save(wb);

Studio wds = new Studio();
wds.setName("Walt Disney Studios");
wds.setCity("Burbank");
wds.setState("California");
studioRepository.save(wds);

Studio sp = new Studio();
sp.setName("Sony Pictures");
sp.setCity("Culver City");
sp.setState("California");
studioRepository.save(sp);

//Christopher Nolan Movies
Director cNolan = new Director("Christopher","Nolan");
directorRepository.save(cNolan);
Movie inters = new Movie("Interstellar", 2014, 8.7);
inters.setStudio(cp);
inters.getDirectors().add(cNolan);
cNolan.getMovies().add(inters);
cp.getMovies().add(inters);
movieRepository.save(inters);

Movie incep = new Movie("Inception", 2010, 8.8);
incep.setStudio(wb);
incep.getDirectors().add(cNolan);
cNolan.getMovies().add(incep);
wb.getMovies().add(incep);
movieRepository.save(incep);

Movie oppen = new Movie("Oppenheimer", 2023, 8.3);
oppen.setStudio(up);
oppen.getDirectors().add(cNolan);
cNolan.getMovies().add(oppen);
up.getMovies().add(oppen);
movieRepository.save(oppen);


Movie darkk = new Movie("Dark Knight", 2008, 9.0);
darkk.setStudio(wb);
darkk.getDirectors().add(cNolan);
cNolan.getMovies().add(darkk);
wb.getMovies().add(darkk);
movieRepository.save(darkk);

//Adam McKay Movies
Director aMckay = new Director("Adam", "McKay");
directorRepository.save(aMckay);
Movie stepb = new Movie("Step Brothers", 2008, 6.9);
stepb.setStudio(sp);
stepb.getDirectors().add(aMckay);
aMckay.getMovies().add(stepb);
sp.getMovies().add(stepb);
movieRepository.save(stepb);

Movie talla = new Movie("Talladega Nights: The Ballad of Ricky Bobby", 2006, 6.6);
talla.setStudio(cp);
talla.getDirectors().add(aMckay);
aMckay.getMovies().add(talla);
cp.getMovies().add(talla);
movieRepository.save(talla);

Movie otherg = new Movie("The Other Guys", 2010, 6.6);
otherg.setStudio(cp);
otherg.getDirectors().add(aMckay);
aMckay.getMovies().add(otherg);
cp.getMovies().add(otherg);
movieRepository.save(otherg);

Movie vice = new Movie("Vice", 2018, 7.2);
vice.setStudio(ap);
vice.getDirectors().add(aMckay);
aMckay.getMovies().add(vice);
ap.getMovies().add(vice);
movieRepository.save(vice);

Movie ancho = new Movie("Anchorman: The Legend of Ron Burgundy", 2004, 7.1);
ancho.setStudio(pp);
ancho.getDirectors().add(aMckay);
aMckay.getMovies().add(ancho);
pp.getMovies().add(ancho);
movieRepository.save(ancho);

//Martin Scorsese Movies
Director mScorsese = new Director("Martin", "Scorsese");
directorRepository.save(mScorsese);
Movie depar = new Movie("The Departed", 2006, 8.5);
depar.setStudio(wb);
depar.getDirectors().add(mScorsese);
mScorsese.getMovies().add(depar);
wb.getMovies().add(depar);
movieRepository.save(depar);

Movie shutte = new Movie("Shutter Island", 2010, 8.2);
shutte.setStudio(pp);
shutte.getDirectors().add(mScorsese);
mScorsese.getMovies().add(shutte);
pp.getMovies().add(shutte);
movieRepository.save(shutte);

Movie casino = new Movie("Casino", 2002, 8.2);
casino.setStudio(up);
casino.getDirectors().add(mScorsese);
mScorsese.getMovies().add(casino);
up.getMovies().add(casino);
movieRepository.save(casino);

Movie goodf = new Movie("Goodfellas", 1990, 8.7);
goodf.setStudio(wb);
goodf.getDirectors().add(mScorsese);
mScorsese.getMovies().add(goodf);
wb.getMovies().add(goodf);
movieRepository.save(goodf);

Movie taxid = new Movie("Taxi Driver", 1976, 8.2);
taxid.setStudio(cp);
taxid.getDirectors().add(mScorsese);
mScorsese.getMovies().add(taxid);
cp.getMovies().add(taxid);
movieRepository.save(taxid);

//Print test statements
System.out.println("Number of Movies: " + movieRepository.count());
System.out.println("Number of Studios: " + studioRepository.count());
System.out.println("Number of Directors: " + directorRepository.count());
System.out.println("Warner Bros number of Movies: " + wb.getMovies().size());
System.out.println("Columbia Pictures number of Movies: " + cp.getMovies().size());
System.out.println("Paramount Pictures number of Movies: " + pp.getMovies().size());
System.out.println("Walt Disney Studio number of Movies: " + wds.getMovies().size());
System.out.println("Annapurna Pictures number of Movies: " + ap.getMovies().size());
System.out.println("Sony Pictures number of Movies: " + sp.getMovies().size());
System.out.println("Universal Pictures number of Movies: " + up.getMovies().size());





}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package guru.springframework.spring5webapp.domain;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

@Entity //not sure why here. annotate the entire class. Tells hibernate this is an entity. We need a private key though or error
public class Director {

@Id //this sets the id variable below as the private key
@GeneratedValue(strategy = GenerationType.AUTO) //tells hibernate how it is getting generated. Syntax means the id value will be generated by the database (mySQL)
private Long id; //private key. Still needs getters and setters
private String firstName;
private String lastName;
@ManyToMany(mappedBy = "directors") //defines relationship between Director and Movie class. Directors can make multiple movies and movies can have many directors.
private Set<Movie> movies = new HashSet<>();


public Director() {
}
public Director(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 String getLastName() {
return lastName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Set<Movie> getMovies() {
return movies;
}
public void setMovies(Set<Movie> movies) {
this.movies = movies;
}

@Override
public String toString() {
return "Director{" +
"id=" + id +
", firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", movies=" + movies +
'}';
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

Director director = (Director) o;

return Objects.equals(id, director.id);
}

@Override
public int hashCode() {
return id != null ? id.hashCode() : 0;
}
}
91 changes: 91 additions & 0 deletions src/main/java/guru/springframework/spring5webapp/domain/Movie.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package guru.springframework.spring5webapp.domain;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

@Entity
public class Movie {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String title;
private int year;
private double imdbRating;
@ManyToOne
private Studio studio;
@ManyToMany //mapping many-to-many relationships like @JoinTable does below is somewhat complex compared to other database relationship types
@JoinTable(name = "director_movie", joinColumns = @JoinColumn(name = "movie_id"), inverseJoinColumns = @JoinColumn(name = "director_id"))
private Set<Director> directors = new HashSet<>();

public Movie() {
}

public Movie(String title, int year, double imdbRating){
this.title = title;
this.year = year;
this.imdbRating = imdbRating;
}

public Studio getStudio() {
return studio;
}
public void setStudio(Studio studio) {
this.studio = studio;
}
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 int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public double getImdbRating() {
return imdbRating;
}
public void setImdbRating(double imdbRating) {
this.imdbRating = imdbRating;
}
public Set<Director> getDirectors() {
return directors;
}
public void setDirectors(Set<Director> directors) {
this.directors = directors;
}

@Override //confused about purpose
public String toString() {
return "Movie{" +
"id=" + id +
", title='" + title + '\'' +
", directors=" + directors +
", studio=" + studio +
'}';
}

@Override //confused about purpose of override and equals() method
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

Movie movie = (Movie) o; //how does this syntax even make sense?

return Objects.equals(id, movie.id);
}

@Override //confused about purpose of override and hashCode() method
public int hashCode() {
return id != null ? id.hashCode() : 0;
}
}
Loading