From 54876515b8eda15d305f6ea9145431a7da724b9c Mon Sep 17 00:00:00 2001 From: Margaryta Date: Tue, 10 Sep 2024 02:47:37 +0300 Subject: [PATCH] Created Movie-Service --- pom.xml | 10 ++++ src/main/java/mate/academy/Main.java | 23 +++++++- src/main/java/mate/academy/dao/MovieDao.java | 10 ++++ .../java/mate/academy/dao/MovieDaoImpl.java | 54 +++++++++++++++++++ .../exception/DataProcessingException.java | 12 +++++ src/main/java/mate/academy/model/Movie.java | 50 +++++++++++++++++ .../mate/academy/service/MovieService.java | 9 ++++ .../academy/service/MovieServiceImpl.java | 21 ++++++++ .../java/mate/academy/util/HibernateUtil.java | 23 ++++++++ src/main/resources/hibernate.cfg.xml | 18 +++++++ 10 files changed, 229 insertions(+), 1 deletion(-) create mode 100644 src/main/java/mate/academy/dao/MovieDao.java create mode 100644 src/main/java/mate/academy/dao/MovieDaoImpl.java create mode 100644 src/main/java/mate/academy/exception/DataProcessingException.java create mode 100644 src/main/java/mate/academy/model/Movie.java create mode 100644 src/main/java/mate/academy/service/MovieService.java create mode 100644 src/main/java/mate/academy/service/MovieServiceImpl.java create mode 100644 src/main/java/mate/academy/util/HibernateUtil.java create mode 100644 src/main/resources/hibernate.cfg.xml diff --git a/pom.xml b/pom.xml index f2dbc0637..1432aa582 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,16 @@ + + org.hibernate.orm + hibernate-core + 6.4.4.Final + + + mysql + mysql-connector-java + 8.0.33 + org.apache.commons commons-lang3 diff --git a/src/main/java/mate/academy/Main.java b/src/main/java/mate/academy/Main.java index 0058fbf96..7584be1e5 100644 --- a/src/main/java/mate/academy/Main.java +++ b/src/main/java/mate/academy/Main.java @@ -1,7 +1,28 @@ package mate.academy; +import mate.academy.dao.MovieDao; +import mate.academy.dao.MovieDaoImpl; +import mate.academy.lib.Inject; +import mate.academy.lib.Injector; +import mate.academy.model.Movie; +import mate.academy.service.MovieService; + public class Main { - public static void main(String[] args) { + private static final Injector injector = Injector.getInstance("mate.academy"); + @Inject + public static void main(String[] args) { + MovieDao movieDao = new MovieDaoImpl(); + Movie firstMovie = new Movie(); + firstMovie.setTitle("Dune"); + firstMovie.setDescription("Great film!"); + Movie secondMovie = new Movie(); + secondMovie.setTitle("Dune"); + secondMovie.setDescription("Great film!"); + MovieService movieService = (MovieService) injector.getInstance(MovieService.class); + System.out.println(movieService.add(firstMovie)); + System.out.println(movieService.add(secondMovie)); + System.out.println(movieService.get(1L)); + System.out.println(movieService.get(2L)); } } diff --git a/src/main/java/mate/academy/dao/MovieDao.java b/src/main/java/mate/academy/dao/MovieDao.java new file mode 100644 index 000000000..e5f725e39 --- /dev/null +++ b/src/main/java/mate/academy/dao/MovieDao.java @@ -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 get(Long id); +} diff --git a/src/main/java/mate/academy/dao/MovieDaoImpl.java b/src/main/java/mate/academy/dao/MovieDaoImpl.java new file mode 100644 index 000000000..a586983bd --- /dev/null +++ b/src/main/java/mate/academy/dao/MovieDaoImpl.java @@ -0,0 +1,54 @@ +package mate.academy.dao; + +import java.util.Optional; +import mate.academy.exception.DataProcessingException; +import mate.academy.lib.Dao; +import mate.academy.model.Movie; +import mate.academy.util.HibernateUtil; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.Transaction; + +@Dao +public class MovieDaoImpl implements MovieDao { + @Override + public Movie add(Movie movie) { + SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); + Session session = null; + Transaction transaction = null; + try { + session = sessionFactory.openSession(); + transaction = session.beginTransaction(); + session.persist(movie); + transaction.commit(); + } catch (Exception e) { + if (transaction != null) { + transaction.rollback(); + } + throw new DataProcessingException("Can`t throw product to DB!", e); + } finally { + if (session != null) { + session.close(); + } + } + return movie; + } + + @Override + public Optional get(Long id) { + Movie movie; + Session session = null; + try { + SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); + session = sessionFactory.openSession(); + movie = session.get(Movie.class, id); + } catch (Exception e) { + throw new DataProcessingException("Can`t get movie from the DB by id: " + id, e); + } finally { + if (session != null) { + session.close(); + } + } + return Optional.ofNullable(movie); + } +} diff --git a/src/main/java/mate/academy/exception/DataProcessingException.java b/src/main/java/mate/academy/exception/DataProcessingException.java new file mode 100644 index 000000000..6a62e1a34 --- /dev/null +++ b/src/main/java/mate/academy/exception/DataProcessingException.java @@ -0,0 +1,12 @@ +package mate.academy.exception; + +public class DataProcessingException extends RuntimeException { + public DataProcessingException(String message, Throwable ex) { + super(message, ex); + } + + public DataProcessingException(String message) { + super(message); + } + +} diff --git a/src/main/java/mate/academy/model/Movie.java b/src/main/java/mate/academy/model/Movie.java new file mode 100644 index 000000000..8c5234340 --- /dev/null +++ b/src/main/java/mate/academy/model/Movie.java @@ -0,0 +1,50 @@ +package mate.academy.model; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.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(long l) { + 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 + '\'' + + '}'; + } +} diff --git a/src/main/java/mate/academy/service/MovieService.java b/src/main/java/mate/academy/service/MovieService.java new file mode 100644 index 000000000..80e46c951 --- /dev/null +++ b/src/main/java/mate/academy/service/MovieService.java @@ -0,0 +1,9 @@ +package mate.academy.service; + +import mate.academy.model.Movie; + +public interface MovieService { + Movie add(Movie movie); + + Movie get(Long id); +} diff --git a/src/main/java/mate/academy/service/MovieServiceImpl.java b/src/main/java/mate/academy/service/MovieServiceImpl.java new file mode 100644 index 000000000..8f6694c30 --- /dev/null +++ b/src/main/java/mate/academy/service/MovieServiceImpl.java @@ -0,0 +1,21 @@ +package mate.academy.service; + +import mate.academy.dao.MovieDao; +import mate.academy.dao.MovieDaoImpl; +import mate.academy.lib.Service; +import mate.academy.model.Movie; + +@Service +public class MovieServiceImpl implements MovieService { + private MovieDao movieDao = new MovieDaoImpl(); + + @Override + public Movie add(Movie movie) { + return movieDao.add(movie); + } + + @Override + public Movie get(Long id) { + return movieDao.get(id).orElseThrow(); + } +} diff --git a/src/main/java/mate/academy/util/HibernateUtil.java b/src/main/java/mate/academy/util/HibernateUtil.java new file mode 100644 index 000000000..79df2adb7 --- /dev/null +++ b/src/main/java/mate/academy/util/HibernateUtil.java @@ -0,0 +1,23 @@ +package mate.academy.util; + +import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; + +public class HibernateUtil { + private static SessionFactory instance = initSessionFactory(); + + private HibernateUtil() { + } + + private static SessionFactory initSessionFactory() { + try { + return new Configuration().configure().buildSessionFactory(); + } catch (Exception e) { + throw new RuntimeException("Can't create session factory ", e); + } + } + + public static SessionFactory getSessionFactory() { + return instance; + } +} diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml new file mode 100644 index 000000000..cb4967cda --- /dev/null +++ b/src/main/resources/hibernate.cfg.xml @@ -0,0 +1,18 @@ + + + + + + org.hibernate.dialect.MySQL8Dialect + jdbc:mysql://localhost:3306/ticket_app?serverTimezone=UTC + com.mysql.cj.jdbc.Driver + root + 123456789* + true + create-drop + + + + \ No newline at end of file