Skip to content

Commit

Permalink
implemented hibernate two dao methods
Browse files Browse the repository at this point in the history
  • Loading branch information
vaniii1 committed Aug 4, 2023
1 parent 744419c commit 4fcdea4
Show file tree
Hide file tree
Showing 8 changed files with 167 additions and 1 deletion.
11 changes: 11 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,18 @@
<artifactId>hsqldb</artifactId>
<version>2.3.4</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.27.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
Expand Down
7 changes: 7 additions & 0 deletions src/main/java/mate/academy/DataProcessingException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package mate.academy;

public class DataProcessingException extends RuntimeException {
public DataProcessingException(String message, Throwable cause) {
super(message, cause);
}
}
15 changes: 14 additions & 1 deletion src/main/java/mate/academy/Main.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,20 @@
package mate.academy;

import mate.academy.dao.MovieDao;
import mate.academy.lib.Injector;
import mate.academy.model.Movie;

public class Main {
public static void main(String[] args) {
private static final Injector injector = Injector.getInstance("mate.academy");
private static final MovieDao movieDao = (MovieDao) injector.getInstance(MovieDao.class);

public static void main(String[] args) {
String title = "Night crawler";
String description = "terrifying photographer";
Movie movie = new Movie();
movie.setTitle(title);
movie.setDescription(description);
System.out.println(movieDao.add(movie));
System.out.println(movieDao.get(movie.getId()));
}
}
10 changes: 10 additions & 0 deletions src/main/java/mate/academy/dao/MovieDao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package mate.academy.dao;

import java.util.Optional;
import mate.academy.model.Movie;

public interface MovieDao {
Movie add(Movie movie);

Optional<Movie> get(Long id);
}
49 changes: 49 additions & 0 deletions src/main/java/mate/academy/dao/MovieDaoImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package mate.academy.dao;

import java.util.Optional;
import mate.academy.DataProcessingException;
import mate.academy.lib.Dao;
import mate.academy.model.Movie;
import mate.academy.util.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;

@Dao
public class MovieDaoImpl implements MovieDao {
@Override
public Movie add(Movie movie) {
Session session = null;
Transaction transaction = null;
try {
session = HibernateUtil.getSessionFactory().openSession();
transaction = session.beginTransaction();
session.save(movie);
transaction.commit();
return movie;
} catch (RuntimeException e) {
if (transaction != null) {
transaction.rollback();
}
throw new DataProcessingException("Couldn't add movie " + movie, e);
} finally {
if (session != null) {
session.close();
}
}
}

@Override
public Optional<Movie> get(Long id) {
Session session = null;
try {
session = HibernateUtil.getSessionFactory().openSession();
return Optional.ofNullable(session.get(Movie.class, id));
} catch (RuntimeException e) {
throw new DataProcessingException("Couldn't get movie by id: " + id, e);
} finally {
if (session != null) {
session.close();
}
}
}
}
47 changes: 47 additions & 0 deletions src/main/java/mate/academy/model/Movie.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package mate.academy.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "movies")
public class Movie {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String description;

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 getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

@Override
public String toString() {
return "Movie{id = " + id + ", title = " + title
+ ", description = " + description + "}";
}
}
16 changes: 16 additions & 0 deletions src/main/java/mate/academy/util/HibernateUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package mate.academy.util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
private static final SessionFactory instance = initSessionFactory();

private static SessionFactory initSessionFactory() {
return new Configuration().configure().buildSessionFactory();
}

public static SessionFactory getSessionFactory() {
return instance;
}
}
13 changes: 13 additions & 0 deletions src/main/resources/hibernate.cfg.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<hibernate-configuration>
<session-factory>
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="connection.url">jdbc:mysql://localhost:3306/cinema</property>
<property name="connection.username">root</property>
<property name="connection.password">Ltkmrf008866</property>
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">create-drop</property>

<mapping class="mate.academy.model.Movie"/>
</session-factory>
</hibernate-configuration>

0 comments on commit 4fcdea4

Please sign in to comment.