From 707a91f64068eb7376ae48a3edef97244392d943 Mon Sep 17 00:00:00 2001 From: Lyudmila Lykova Date: Thu, 5 Jan 2023 18:08:16 +0300 Subject: [PATCH] hibernate #1 implements --- pom.xml | 15 +++++ .../com/game/controller/PlayerController.java | 2 +- src/main/java/com/game/entity/Player.java | 24 ++++++- .../game/repository/IPlayerRepository.java | 2 +- .../game/repository/PlayerRepositoryDB.java | 63 ++++++++++++++++--- .../repository/PlayerRepositoryMemory.java | 2 +- .../java/com/game/service/PlayerService.java | 2 +- src/main/resources/spy.properties | 4 ++ 8 files changed, 100 insertions(+), 14 deletions(-) create mode 100644 src/main/resources/spy.properties diff --git a/pom.xml b/pom.xml index 49bebd6a..d403213c 100644 --- a/pom.xml +++ b/pom.xml @@ -109,6 +109,21 @@ thymeleaf-spring5 3.0.15.RELEASE + + mysql + mysql-connector-java + 8.0.30 + + + org.hibernate + hibernate-core-jakarta + 5.6.11.Final + + + p6spy + p6spy + 3.9.1 + diff --git a/src/main/java/com/game/controller/PlayerController.java b/src/main/java/com/game/controller/PlayerController.java index 362efdbb..9c5f933e 100644 --- a/src/main/java/com/game/controller/PlayerController.java +++ b/src/main/java/com/game/controller/PlayerController.java @@ -38,7 +38,7 @@ public List getAll(@RequestParam(required = false) Integer pageNumbe } @GetMapping("/count") - public Integer getAllCount() { + public long getAllCount() { return playerService.getAllCount(); } diff --git a/src/main/java/com/game/entity/Player.java b/src/main/java/com/game/entity/Player.java index a6cb7bca..eacb5f68 100644 --- a/src/main/java/com/game/entity/Player.java +++ b/src/main/java/com/game/entity/Player.java @@ -1,23 +1,45 @@ package com.game.entity; -import java.util.Date; +import jakarta.persistence.*; +import java.util.Date; +@NamedQueries({ + @NamedQuery( + name = "allCountQuery", + query = "select count(*) from Player" + )} +) +@Entity +@Table(name = "player", schema = "rpg") public class Player { + + @Id + @GeneratedValue(strategy= GenerationType.AUTO) + @Column(name = "id") private Long id; + @Column(name = "name", length = 12, nullable = false) private String name; + @Column(name = "title", length = 30, nullable = false) private String title; + @Enumerated(EnumType.ORDINAL) + @Column(name = "race", nullable = false) private Race race; + @Enumerated(EnumType.ORDINAL) + @Column(name = "profession", nullable = false) private Profession profession; + @Column(name = "birthday", nullable = false) private Date birthday; + @Column(name = "banned", nullable = false) private Boolean banned; + @Column(name = "level", nullable = false) private Integer level; public Player() { diff --git a/src/main/java/com/game/repository/IPlayerRepository.java b/src/main/java/com/game/repository/IPlayerRepository.java index a240d935..6176aa2a 100644 --- a/src/main/java/com/game/repository/IPlayerRepository.java +++ b/src/main/java/com/game/repository/IPlayerRepository.java @@ -8,7 +8,7 @@ public interface IPlayerRepository { List getAll(int pageNumber, int pageSize); - int getAllCount(); + long getAllCount(); Player save(Player player); diff --git a/src/main/java/com/game/repository/PlayerRepositoryDB.java b/src/main/java/com/game/repository/PlayerRepositoryDB.java index 4f80ac70..43d4ca8c 100644 --- a/src/main/java/com/game/repository/PlayerRepositoryDB.java +++ b/src/main/java/com/game/repository/PlayerRepositoryDB.java @@ -1,51 +1,96 @@ package com.game.repository; import com.game.entity.Player; +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 { - public PlayerRepositoryDB() { + private final SessionFactory sessionFactory; + public PlayerRepositoryDB() { + Properties properties = new Properties(); + properties.put(Environment.DIALECT, "org.hibernate.dialect.MySQL8Dialect"); + properties.put(Environment.USER, "root"); + properties.put(Environment.PASS, "my-secret-pw"); + properties.put(Environment.HBM2DDL_AUTO, "update"); + properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver"); + properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg"); + sessionFactory = new Configuration() + .setProperties(properties) + .addAnnotatedClass(Player.class) + .buildSessionFactory(); } @Override public List getAll(int pageNumber, int pageSize) { - return null; + try (Session session = sessionFactory.openSession()) { + String sql = String.format("select * from player limit %d offset %d", pageSize, (pageNumber * pageSize)); + NativeQuery nativeQuery = session.createNativeQuery(sql, Player.class); + return nativeQuery.list(); + } } @Override - public int getAllCount() { - return 0; + public long getAllCount() { + try (Session session = sessionFactory.openSession()) { + Query query = session.createNamedQuery("allCountQuery", Long.class); + return 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()) { + Query query = session.createQuery("from Player where id = ?1", Player.class); + query.setParameter(1, id); + return Optional.ofNullable(query.uniqueResult()); + } } @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/java/com/game/repository/PlayerRepositoryMemory.java b/src/main/java/com/game/repository/PlayerRepositoryMemory.java index abe8167c..cd96870f 100644 --- a/src/main/java/com/game/repository/PlayerRepositoryMemory.java +++ b/src/main/java/com/game/repository/PlayerRepositoryMemory.java @@ -69,7 +69,7 @@ public List getAll(int pageNumber, int pageSize) { } @Override - public int getAllCount() { + public long getAllCount() { return storage.size(); } diff --git a/src/main/java/com/game/service/PlayerService.java b/src/main/java/com/game/service/PlayerService.java index 4f83b407..b59993b6 100644 --- a/src/main/java/com/game/service/PlayerService.java +++ b/src/main/java/com/game/service/PlayerService.java @@ -27,7 +27,7 @@ public List getAll(int pageNumber, int pageSize) { return playerRepository.getAll(pageNumber, pageSize); } - public Integer getAllCount() { + public long getAllCount() { return playerRepository.getAllCount(); } 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