From 5219f1994052cc9cd4dd743fd7aa1c6bf80d85a4 Mon Sep 17 00:00:00 2001 From: Kirill Shott <piupip4@gmail.com> Date: Mon, 29 May 2023 19:58:56 +0300 Subject: [PATCH] done --- pom.xml | 18 +++++ src/main/java/com/game/entity/Player.java | 20 ++++-- .../game/repository/PlayerRepositoryDB.java | 69 ++++++++++++++++--- 3 files changed, 92 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index 49bebd6a..d4f74edb 100644 --- a/pom.xml +++ b/pom.xml @@ -109,6 +109,24 @@ <artifactId>thymeleaf-spring5</artifactId> <version>3.0.15.RELEASE</version> </dependency> + + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + <version>8.0.30</version> + </dependency> + + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-core-jakarta</artifactId> + <version>5.6.11.Final</version> + </dependency> + + <dependency> + <groupId>p6spy</groupId> + <artifactId>p6spy</artifactId> + <version>3.9.1</version> + </dependency> </dependencies> <build> diff --git a/src/main/java/com/game/entity/Player.java b/src/main/java/com/game/entity/Player.java index a6cb7bca..8ed4c9c6 100644 --- a/src/main/java/com/game/entity/Player.java +++ b/src/main/java/com/game/entity/Player.java @@ -1,23 +1,31 @@ package com.game.entity; -import java.util.Date; +import jakarta.persistence.*; +import java.util.Date; +@Entity +@Table(name = "player", schema = "rpg") public class Player { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(nullable = false) private Long id; - + @Column(length = 12, nullable = false) private String name; - + @Column(length = 35, nullable = false) private String title; + @Enumerated(EnumType.ORDINAL) private Race race; + @Enumerated(EnumType.ORDINAL) 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..c535e5f0 100644 --- a/src/main/java/com/game/repository/PlayerRepositoryDB.java +++ b/src/main/java/com/game/repository/PlayerRepositoryDB.java @@ -1,51 +1,102 @@ package com.game.repository; +import com.fasterxml.jackson.databind.annotation.JsonAppend; import com.game.entity.Player; +import jakarta.persistence.NamedQuery; +import jakarta.persistence.criteria.CriteriaBuilder; +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; + +@NamedQuery( + name = "Player_CountAllPlayers", + query = "select count(*) from Player" +) @Repository(value = "db") public class PlayerRepositoryDB implements IPlayerRepository { + private final SessionFactory sessionFactory; public PlayerRepositoryDB() { + Properties properties = new Properties(); + properties.put(Environment.DIALECT, "org.hibernate.dialect.MySQL8Dialect"); + 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, "my-new-pass"); + properties.put(Environment.HBM2DDL_AUTO, "update"); + + sessionFactory = new Configuration() + .addAnnotatedClass(Player.class) + .addProperties(properties) + .buildSessionFactory(); } @Override public List<Player> getAll(int pageNumber, int pageSize) { - return null; + try (Session session = sessionFactory.openSession()) { + NativeQuery<Player> nativeQuery = session.createNativeQuery("select * from rpg.player", Player.class); + nativeQuery.setFirstResult(pageNumber); + nativeQuery.setMaxResults(pageSize); + return nativeQuery.list(); + } } @Override public int getAllCount() { - return 0; + try (Session session = sessionFactory.openSession()) { + Query<Long> playerCountAllPlayers = session.createNamedQuery("Player_CountAllPlayers", Long.class); + return playerCountAllPlayers.uniqueResult().intValue(); + } } @Override public Player save(Player player) { - return null; + try(Session session = sessionFactory.openSession()) { + Transaction transaction = session.beginTransaction(); + session.persist(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<Player> findById(long id) { - return Optional.empty(); + try(Session session = sessionFactory.openSession()) { + return Optional.of(session.find(Player.class, id)); + } } @Override public void delete(Player player) { - + try(Session session = sessionFactory.openSession()) { + Transaction transaction = session.beginTransaction(); + session.remove(player); + transaction.commit(); + } } - @PreDestroy public void beforeStop() { - + sessionFactory.close(); } } \ No newline at end of file