Add HibernateConfig class for database configuration and refactor App to use BigDecimal for Ad prices

This commit is contained in:
Vincent Guillet
2025-05-20 13:43:09 +02:00
parent 24eab5f2cc
commit 3da2712bdf
3 changed files with 82 additions and 9 deletions

View File

@@ -1,5 +1,6 @@
package com.humanbooster; package com.humanbooster;
import com.humanbooster.config.HibernateConfig;
import com.humanbooster.dao.AdDao; import com.humanbooster.dao.AdDao;
import com.humanbooster.dao.ArticleDao; import com.humanbooster.dao.ArticleDao;
import com.humanbooster.dao.UserDao; 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.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import java.math.BigDecimal;
import java.time.Duration; import java.time.Duration;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
@@ -24,13 +26,18 @@ public class App {
public static void main(String[] args) { public static void main(String[] args) {
System.out.println("Démarrage de l'application"); System.out.println("Démarrage de l'application");
StandardServiceRegistry registry = new StandardServiceRegistryBuilder() SessionFactory sessionFactory;
.configure()
.build();
Metadata metadata = new MetadataSources(registry).buildMetadata(); if (HibernateConfig.LOCAL) sessionFactory = HibernateConfig.getSessionFactory();
SessionFactory sessionFactory = metadata.buildSessionFactory();
System.out.println("Connexion réussie !"); 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); 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) 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<Ad> 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)); UserService userService = new UserService(new UserDao(sessionFactory));
ArticleService articleService = new ArticleService(new ArticleDao(sessionFactory)); ArticleService articleService = new ArticleService(new ArticleDao(sessionFactory));
@@ -54,7 +77,7 @@ public class App {
} }
); );
adService.createAd(ad); ads.forEach(adService::createAd);
sessionFactory.close(); sessionFactory.close();
System.out.print("Fin du programme"); System.out.print("Fin du programme");

View File

@@ -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&amp;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;
}
}

View File

@@ -12,9 +12,9 @@
<property name="hibernate.hbm2ddl.auto">update</property> <property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">false</property> <property name="hibernate.show_sql">false</property>
<property name="hibernate.format_sql">true</property> <property name="hibernate.format_sql">true</property>
<mapping class="com.humanbooster.model.User"/> <mapping class="com.humanbooster.model.User"/>
<mapping class="com.humanbooster.model.Article"/> <mapping class="com.humanbooster.model.Article"/>
<mapping class="com.humanbooster.model.Ad"/> <mapping class="com.humanbooster.model.Ad"/>