From 3da2712bdfafe5ec3905e4c7141c3dc016313dae Mon Sep 17 00:00:00 2001 From: Vincent Guillet Date: Tue, 20 May 2025 13:43:09 +0200 Subject: [PATCH] Add HibernateConfig class for database configuration and refactor App to use BigDecimal for Ad prices --- .../src/main/java/com/humanbooster/App.java | 39 ++++++++++++--- .../humanbooster/config/HibernateConfig.java | 50 +++++++++++++++++++ .../src/main/resources/hibernate.cfg.xml | 2 +- 3 files changed, 82 insertions(+), 9 deletions(-) create mode 100644 hibernate-project/src/main/java/com/humanbooster/config/HibernateConfig.java diff --git a/hibernate-project/src/main/java/com/humanbooster/App.java b/hibernate-project/src/main/java/com/humanbooster/App.java index 34bf0ae..6a4abbd 100644 --- a/hibernate-project/src/main/java/com/humanbooster/App.java +++ b/hibernate-project/src/main/java/com/humanbooster/App.java @@ -1,5 +1,6 @@ package com.humanbooster; +import com.humanbooster.config.HibernateConfig; import com.humanbooster.dao.AdDao; import com.humanbooster.dao.ArticleDao; import com.humanbooster.dao.UserDao; @@ -15,6 +16,7 @@ import org.hibernate.boot.MetadataSources; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; +import java.math.BigDecimal; import java.time.Duration; import java.time.LocalDate; import java.time.temporal.ChronoUnit; @@ -24,13 +26,18 @@ public class App { public static void main(String[] args) { System.out.println("Démarrage de l'application"); - StandardServiceRegistry registry = new StandardServiceRegistryBuilder() - .configure() - .build(); + SessionFactory sessionFactory; - Metadata metadata = new MetadataSources(registry).buildMetadata(); - SessionFactory sessionFactory = metadata.buildSessionFactory(); - System.out.println("Connexion réussie !"); + if (HibernateConfig.LOCAL) sessionFactory = HibernateConfig.getSessionFactory(); + + else { + StandardServiceRegistry registry = new StandardServiceRegistryBuilder() + .configure() + .build(); + + Metadata metadata = new MetadataSources(registry).buildMetadata(); + sessionFactory = metadata.buildSessionFactory(); + } User user = new User("Bob", "bob@example.com", null); @@ -39,7 +46,23 @@ public class App { new Article("Article 2", "Contenu de l'article 2", LocalDate.now(), user, 0) )); - Ad ad = new Ad("Ad 1", "Contenu de l'annonce 1", LocalDate.now(), LocalDate.now().plusDays(7), "contact@example.com", 12); + List ads = List.of( + (new Ad( + "Ad 1", + "Contenu de l'annonce 1", + LocalDate.now(), + LocalDate.now().plusDays(7), + "contact@example.com", + BigDecimal.valueOf(12))), + (new Ad( + "Ad 2", + "Contenu de l'annonce 2", + LocalDate.now(), + LocalDate.now().plusDays(10), + "contact@example.com", + BigDecimal.valueOf(6.7))) + + ); UserService userService = new UserService(new UserDao(sessionFactory)); ArticleService articleService = new ArticleService(new ArticleDao(sessionFactory)); @@ -54,7 +77,7 @@ public class App { } ); - adService.createAd(ad); + ads.forEach(adService::createAd); sessionFactory.close(); System.out.print("Fin du programme"); diff --git a/hibernate-project/src/main/java/com/humanbooster/config/HibernateConfig.java b/hibernate-project/src/main/java/com/humanbooster/config/HibernateConfig.java new file mode 100644 index 0000000..c5900d2 --- /dev/null +++ b/hibernate-project/src/main/java/com/humanbooster/config/HibernateConfig.java @@ -0,0 +1,50 @@ +package com.humanbooster.config; + +import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; +import org.reflections.Reflections; + +import jakarta.persistence.Entity; + +public class HibernateConfig { + private static final SessionFactory sessionFactory; + public static final boolean LOCAL = true; + private static String url; + private static String username; + private static String password; + + + static { + + if (LOCAL) { + url = "jdbc:mysql://127.0.0.1:3306/testdb"; + username = "admin"; + password = "admin"; + } else { + url = "jdbc:mysql://mysql:3306/testdb?useSSL=false&allowPublicKeyRetrieval=true"; + username = "root"; + password = "root"; + } + + Configuration config = new Configuration() + .setProperty("hibernate.connection.url", url) + .setProperty("hibernate.connection.username", username) + .setProperty("hibernate.connection.password", password) + .setProperty("hibernate.connection.driver_class", "com.mysql.cj.jdbc.Driver") + .setProperty("hibernate.hbm2ddl.auto", "update") + .setProperty("hibernate.show_sql", "false") + .setProperty("hibernate.format_sql", "true"); + + Reflections reflections = new Reflections("com.humanbooster.model"); + for (Class clazz : reflections.getTypesAnnotatedWith(Entity.class)) { + config.addAnnotatedClass(clazz); + } + + sessionFactory = config.buildSessionFactory(); + } + + public static SessionFactory getSessionFactory() { + return sessionFactory; + } +} + diff --git a/hibernate-project/src/main/resources/hibernate.cfg.xml b/hibernate-project/src/main/resources/hibernate.cfg.xml index a1788a6..b23b31e 100644 --- a/hibernate-project/src/main/resources/hibernate.cfg.xml +++ b/hibernate-project/src/main/resources/hibernate.cfg.xml @@ -12,9 +12,9 @@ update - false true +