From 88a9b2b70643acd936a37f0b03b9e0327cdc5f71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beatrice=20Dellac=C3=A0?= Date: Tue, 6 Aug 2024 23:57:50 +0200 Subject: [PATCH] RHSRV-3 - Implement Hibernate PSQL with basic /register API --- pom.xml | 12 +++++ .../releasehive/AccountController.java | 27 +++++++++++ .../beatrice/releasehive/AccountService.java | 15 ++++++ .../releasehive/HibernateManager.java | 44 +++++++++++++++++ .../java/wtf/beatrice/releasehive/Main.java | 22 +++++++++ .../beatrice/releasehive/TryController.java | 13 ----- .../java/wtf/beatrice/releasehive/User.java | 48 +++++++++++++++++++ src/main/resources/hibernate.cfg.xml | 28 +++++++++++ 8 files changed, 196 insertions(+), 13 deletions(-) create mode 100644 src/main/java/wtf/beatrice/releasehive/AccountController.java create mode 100644 src/main/java/wtf/beatrice/releasehive/AccountService.java create mode 100644 src/main/java/wtf/beatrice/releasehive/HibernateManager.java delete mode 100644 src/main/java/wtf/beatrice/releasehive/TryController.java create mode 100644 src/main/java/wtf/beatrice/releasehive/User.java create mode 100644 src/main/resources/hibernate.cfg.xml diff --git a/pom.xml b/pom.xml index 9b8762b..f5cdd91 100644 --- a/pom.xml +++ b/pom.xml @@ -24,6 +24,18 @@ spring-boot-starter-web 3.3.2 + + + org.hibernate + hibernate-core + 5.6.15.Final + + + + org.postgresql + postgresql + 42.7.3 + diff --git a/src/main/java/wtf/beatrice/releasehive/AccountController.java b/src/main/java/wtf/beatrice/releasehive/AccountController.java new file mode 100644 index 0000000..f1480c0 --- /dev/null +++ b/src/main/java/wtf/beatrice/releasehive/AccountController.java @@ -0,0 +1,27 @@ +package wtf.beatrice.releasehive; + +import org.springframework.web.bind.annotation.*; + +import java.util.UUID; + +@RestController +public class AccountController { + + private final AccountService accountService = new AccountService(); + + + @PostMapping("/register") + public String register( + @RequestParam(name = "username") String username, + @RequestParam(name="password") String password) + { + + UUID id = UUID.randomUUID(); + User user = new User(); + user.setUsername(username); + user.setPassword(password); + user.setUuid(id); + accountService.registerUser(user); + return "user registered, " + username + ", " + password + ", " + id.toString(); + } +} diff --git a/src/main/java/wtf/beatrice/releasehive/AccountService.java b/src/main/java/wtf/beatrice/releasehive/AccountService.java new file mode 100644 index 0000000..452fc1e --- /dev/null +++ b/src/main/java/wtf/beatrice/releasehive/AccountService.java @@ -0,0 +1,15 @@ +package wtf.beatrice.releasehive; + +import org.hibernate.Session; +import org.hibernate.Transaction; + +public class AccountService +{ + + public void registerUser(User user) { + Session session = HibernateManager.getSession(); + Transaction tx = session.beginTransaction(); + session.save(user); + tx.commit(); + } +} diff --git a/src/main/java/wtf/beatrice/releasehive/HibernateManager.java b/src/main/java/wtf/beatrice/releasehive/HibernateManager.java new file mode 100644 index 0000000..615f802 --- /dev/null +++ b/src/main/java/wtf/beatrice/releasehive/HibernateManager.java @@ -0,0 +1,44 @@ +package wtf.beatrice.releasehive; + +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.Transaction; +import org.hibernate.cfg.Configuration; + +public class HibernateManager +{ + private static HibernateManager instance; + private static Session session; + private static SessionFactory sessionFactory; + + + private HibernateManager() { + } + + public static void initialize() { + sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory(); + } + + public static void shutdown() { + if(session != null && !session.isOpen()) { + session.close(); + } + if(sessionFactory != null && sessionFactory.isOpen()) { + session.close(); + } + } + + + public static Session getSession() { + if(session != null && (!session.isOpen() || !session.isConnected())) { + session.close(); + } + + session = sessionFactory.openSession(); + return session; + } + + public static Transaction beginTransaction() { + return getSession().beginTransaction(); + } +} diff --git a/src/main/java/wtf/beatrice/releasehive/Main.java b/src/main/java/wtf/beatrice/releasehive/Main.java index 9fb3712..faa9519 100644 --- a/src/main/java/wtf/beatrice/releasehive/Main.java +++ b/src/main/java/wtf/beatrice/releasehive/Main.java @@ -2,9 +2,14 @@ package wtf.beatrice.releasehive; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.hibernate.Session; +import org.hibernate.Transaction; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import java.util.List; +import java.util.UUID; + @SpringBootApplication public class Main { @@ -12,9 +17,26 @@ public class Main { public static void main(String[] args) { LOGGER.info("Hello world!"); + Runtime.getRuntime().addShutdownHook(shutdownHook); LOGGER.info("Initializing Spring Boot"); SpringApplication.run(Main.class, args); LOGGER.info("Spring Boot initialized!"); + + HibernateManager.initialize(); + + Session session = HibernateManager.getSession(); + Transaction transaction = session.beginTransaction(); + List users = session.createQuery("FROM User", User.class).getResultList(); + for (User user : users) { + LOGGER.info("ID: {}, Name: {}", user.getUuid(), user.getUsername()); + } + transaction.commit(); + } + + private static final Thread shutdownHook = new Thread(() -> { + HibernateManager.shutdown(); + LOGGER.info("Shutting down!"); + }); } diff --git a/src/main/java/wtf/beatrice/releasehive/TryController.java b/src/main/java/wtf/beatrice/releasehive/TryController.java deleted file mode 100644 index 124e179..0000000 --- a/src/main/java/wtf/beatrice/releasehive/TryController.java +++ /dev/null @@ -1,13 +0,0 @@ -package wtf.beatrice.releasehive; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class TryController { - - @GetMapping("/try") - public String tryMethod() { - return "Hello World!"; - } -} diff --git a/src/main/java/wtf/beatrice/releasehive/User.java b/src/main/java/wtf/beatrice/releasehive/User.java new file mode 100644 index 0000000..19596ea --- /dev/null +++ b/src/main/java/wtf/beatrice/releasehive/User.java @@ -0,0 +1,48 @@ +package wtf.beatrice.releasehive; + + +import javax.persistence.*; +import java.util.UUID; + +@Entity +@Table(name="users") +public class User +{ + + @Id + @Column + private UUID uuid; + + @Column + private String username; + + + @Column + private String password; + + public UUID getUuid() { + return uuid; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public void setUuid(UUID uuid) { + this.uuid = uuid; + + + } +} diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml new file mode 100644 index 0000000..ce94647 --- /dev/null +++ b/src/main/resources/hibernate.cfg.xml @@ -0,0 +1,28 @@ + + + + + + + + org.postgresql.Driver + jdbc:postgresql://localhost:5432/releasehive + relhive + development + + + org.hibernate.dialect.PostgreSQLDialect + + + true + + + update + + + + + +