From 4850e5a6b943622feabdae1009fa1ebdec55b2da Mon Sep 17 00:00:00 2001 From: VladyKh Date: Sat, 27 Jul 2024 11:55:43 +0200 Subject: [PATCH] Configured Hibernate with P6Spy for database connection, arranged all the necessary instructions in the com.game.entity.Player, implemented CRUD methods in PlayerRepositoryDB --- pom.xml | 22 ++++++ src/main/java/com/game/entity/Player.java | 25 ++++--- .../game/repository/PlayerRepositoryDB.java | 70 +++++++++++++++++-- src/main/resources/spy.properties | 4 ++ 4 files changed, 106 insertions(+), 15 deletions(-) create mode 100644 src/main/resources/spy.properties diff --git a/pom.xml b/pom.xml index 49bebd6a..63ff5a86 100644 --- a/pom.xml +++ b/pom.xml @@ -91,6 +91,17 @@ log4j-to-slf4j 2.19.0 + + javax.annotation + javax.annotation-api + 1.3.1 + provided + + + p6spy + p6spy + 3.9.1 + com.fasterxml.jackson.core @@ -109,6 +120,17 @@ thymeleaf-spring5 3.0.15.RELEASE + + mysql + mysql-connector-java + 8.0.30 + + + + org.hibernate + hibernate-core-jakarta + 5.6.11.Final + diff --git a/src/main/java/com/game/entity/Player.java b/src/main/java/com/game/entity/Player.java index a6cb7bca..4cb94fa2 100644 --- a/src/main/java/com/game/entity/Player.java +++ b/src/main/java/com/game/entity/Player.java @@ -1,23 +1,32 @@ package com.game.entity; -import java.util.Date; +import jakarta.persistence.*; +import java.util.Date; +@Entity +@Table(name = "Player", schema = "rpg") +@NamedQuery(name = "Player.getAllCount", query = "SELECT COUNT(p) from Player p") public class Player { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(nullable = false) private Long id; - + @Column(nullable = false, length = 12) private String name; - + @Column(nullable = false, length = 30) private String title; - + @Enumerated(EnumType.ORDINAL) + @Column(nullable = false) private Race race; - + @Enumerated(EnumType.ORDINAL) + @Column(nullable = false) private Profession profession; - + @Column(nullable = false) private Date birthday; - + @Column(nullable = false) private Boolean banned; - + @Column(nullable = false) private Integer level; public Player() { diff --git a/src/main/java/com/game/repository/PlayerRepositoryDB.java b/src/main/java/com/game/repository/PlayerRepositoryDB.java index 4f80ac70..e5aa5916 100644 --- a/src/main/java/com/game/repository/PlayerRepositoryDB.java +++ b/src/main/java/com/game/repository/PlayerRepositoryDB.java @@ -1,51 +1,107 @@ package com.game.repository; +import com.game.controller.PlayerController; import com.game.entity.Player; +import jakarta.persistence.TypedQuery; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.Transaction; +import org.hibernate.cfg.Configuration; +import org.hibernate.cfg.Environment; +import org.hibernate.query.NativeQuery; +import org.hibernate.query.Query; import org.springframework.stereotype.Repository; import javax.annotation.PreDestroy; + + import java.util.List; import java.util.Optional; +import java.util.Properties; @Repository(value = "db") public class PlayerRepositoryDB implements IPlayerRepository { + private final SessionFactory sessionFactory; + public PlayerRepositoryDB() { + Properties properties = new Properties(); + properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver"); + properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg"); + properties.put(Environment.USER, "root"); + properties.put(Environment.PASS, "password"); + properties.put(Environment.HBM2DDL_AUTO, "update"); + sessionFactory = new Configuration() + .addAnnotatedClass(Player.class) + .addProperties(properties) + .buildSessionFactory(); } + @Override public List getAll(int pageNumber, int pageSize) { - return null; + try (Session session = sessionFactory.openSession()) { + String sql = "SELECT * from rpg.player"; + NativeQuery nativeQuery = session.createNativeQuery(sql, Player.class); + nativeQuery.setFirstResult(pageNumber * pageSize); + nativeQuery.setMaxResults(pageSize); + return nativeQuery.list(); + } } @Override public int getAllCount() { - return 0; + try (Session session = sessionFactory.openSession()) { + Query query = session.createNamedQuery("Player.getAllCount", Long.class); + return Math.toIntExact(query.uniqueResult()); + } } @Override public Player save(Player player) { - return null; + try (Session session = sessionFactory.openSession()) { + Transaction transaction = session.beginTransaction(); + session.save(player); + transaction.commit(); + } + return player; } @Override public Player update(Player player) { - return null; + try (Session session = sessionFactory.openSession()) { + Transaction transaction = session.beginTransaction(); + session.update(player); + transaction.commit(); + } + return player; } + @Override public Optional findById(long id) { - return Optional.empty(); + try (Session session = sessionFactory.openSession()) { + String sql = "SELECT * from Player where id = :ID"; + NativeQuery query = session.createNativeQuery(sql, Player.class); + query.setParameter("ID", id); + Player player = query.uniqueResult(); + + return Optional.ofNullable(player); + } } @Override public void delete(Player player) { - + try (Session session = sessionFactory.openSession()) { + Transaction transaction = session.beginTransaction(); + session.delete(player); + transaction.commit(); + } } @PreDestroy public void beforeStop() { - + sessionFactory.close(); } } \ No newline at end of file diff --git a/src/main/resources/spy.properties b/src/main/resources/spy.properties new file mode 100644 index 00000000..dfff2036 --- /dev/null +++ b/src/main/resources/spy.properties @@ -0,0 +1,4 @@ +driverlist=com.mysql.cj.jdbc.Driver +dateformat=yyyy-MM-dd hh:mm:ss a +appender=com.p6spy.engine.spy.appender.StdoutLogger +logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat \ No newline at end of file