diff --git a/pom.xml b/pom.xml index 49bebd6a..9285a528 100644 --- a/pom.xml +++ b/pom.xml @@ -109,6 +109,28 @@ <artifactId>thymeleaf-spring5</artifactId> <version>3.0.15.RELEASE</version> </dependency> + + <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + <version>8.0.30</version> + </dependency> + + <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core-jakarta --> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-core-jakarta</artifactId> + <version>5.6.11.Final</version> + </dependency> + + <!-- https://mvnrepository.com/artifact/p6spy/p6spy --> + <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..ff671a26 100644 --- a/src/main/java/com/game/entity/Player.java +++ b/src/main/java/com/game/entity/Player.java @@ -1,23 +1,38 @@ package com.game.entity; -import java.util.Date; +import jakarta.persistence.*; +import java.util.Date; +@NamedQuery(name = "PLAYERS_GET_ALL_COUNT", query = "select count (p) from Player p") +@Entity +@Table(name = "player", schema = "rpg") public class Player { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @Column(name="name", unique = true, length=12, nullable = false) private String name; + @Column(name = "title", nullable = false, length = 30) private String title; + @Column(name = "race", nullable = false) + @Enumerated(EnumType.ORDINAL) private Race race; + @Column(name = "profession", nullable = false) + @Enumerated(EnumType.ORDINAL) 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/PlayerRepositoryDB.java b/src/main/java/com/game/repository/PlayerRepositoryDB.java index 4f80ac70..aec0dc64 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 jakarta.persistence.NamedQuery; +import org.hibernate.Hibernate; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +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.DRIVER, "com.mysql.cj.jdbc.Driver"); + properties.put(Environment.URL, "jdbc:mysql://localhost:3306/rpg"); + properties.put(Environment.HBM2DDL_AUTO, "update"); + properties.put(Environment.USER, "root"); + properties.put(Environment.PASS, "root"); + 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> query = session.createNativeQuery("select * from rpg.player", Player.class); + query.setFirstResult(pageNumber * pageSize); + query.setMaxResults(pageSize); + return query.list(); + } } @Override public int getAllCount() { - return 0; + try (Session session = sessionFactory.openSession()) { + Query<Long> query = session.createNamedQuery("PLAYERS_GET_ALL_COUNT", Long.class); + return Math.toIntExact(query.getSingleResult()); + } } @Override public Player save(Player player) { - return null; + try (Session session = sessionFactory.openSession()) { + session.beginTransaction(); + session.save(player); + session.getTransaction().commit(); + return player; + } } @Override public Player update(Player player) { - return null; + try (Session session = sessionFactory.openSession()) { + session.beginTransaction(); + session.update(player); + session.getTransaction().commit(); + return player; + } } @Override public Optional<Player> findById(long id) { - return Optional.empty(); + try (Session session = sessionFactory.openSession()) { + return Optional.ofNullable(session.get(Player.class, id)); + } } @Override public void delete(Player player) { - + try (Session session = sessionFactory.openSession()) { + session.beginTransaction(); + session.delete(player); + session.getTransaction().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