Vous êtes sur la page 1sur 4

Direction Générale des Etudes Technologiques

Institut Supérieur des Etudes Technologiques de Djerba

Module : Programmation Orientée Objet : Atelier Java

Enseignants : Anis ASSES Public cible : Classes de 1ère année du mastère : M1-TICIT

TRAVAUX PRATIQUES N°5 :


Manipulation d’une base de données en Java

Accès à une base de données à partir d’un projet Maven en utilisant


hibernate

L’objectif maintenant est de présenter un exemple de code pour configurer le framework


de persistance Hibernate à partir d’un projet maven, tester la connexion à la base de
données MySQL et exécuter certaines requêtes à l'aide d'Hibernate en utilisant les
annotations.

1. Base de données

Créez une nouvelle base de données sous MySql intitulée persist_db :

CREATE DATABASE `persist_db`

Créez la table product au niveau de cette base de données conformément aux requêtes
SQL suivantes :
CREATE TABLE `persist_db`.`product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`price` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2. Création d’un projet maven et ajout des dépendances

Créez un nouveau projet maven en ajoutant les dépendances suivantes au niveau du fichier
pom.xml :
- mysql-connector-java
- hibernate-core

3. Création d’une classe POJO (Plain Old Java Object)

Au niveau d’un nouveau package net.isetjb.hibernatetutorial, Créez la classe Product


conformément au code suivant :

@Entity
@Table(name = "product")
public class Product
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private int id;

@Column(name = "name", length = 255, nullable = true)


private String name;

Page 1|4
@Column(name = "price", nullable = true)
private int price;

// GETTERs and SETTERs here...


}
Avec :
 @Entity : référence à la classe "Product" (Bean / POJO)
 @Table : table qui sera utilisée pour persister l'entité dans la base de données
 @Id : primary key
 @GeneratedValue : type de génération pour la clé primaire (ex : AUTO_INCREMENT
in MySQL)
 @Column : détails de la colonne dont une propriété sera mappée

- Créez les getters et les setters relatifs à cette classe.

4. Configuration du fichier d’hibernate : 'hibernate.cfg.xml'

Au niveau du package src/main/ressources, créez le fichier hibernate.cfg.xml contenant le


code suivant :

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD
3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- MySQL -->
<property
name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property
name="hibernate.connection.url">jdbc:mysql://localhost:3306/persist_db </property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>

<!-- Hibernate -->


<property name="show_sql">true</property>
<property name="format_sql">false</property>
<property name="hibernate.hbm2ddl.auto">update</property>

<!-- Entities -->


<mapping class="net.isetjb.hibernateTutorial.Product"/>
</session-factory>
</hibernate-configuration>

5. Création du fichier java : HibernateUtil.java

Créez maintenant la classe HibernateUtil contenant le code suivant :

public class HibernateUtil


{

private static SessionFactory sessionFactory;

Page 2|4
public static SessionFactory getSessionFactory() {
if (sessionFactory == null) {
try {
//Create the SessionFactory from standard (hibernate.cfg.xml) config file.
sessionFactory = new
Configuration().configure().buildSessionFactory();
}
catch (Throwable ex) {
// Log the exception.
System.err.println("Initial SessionFactory creation failed." +
ex);
throw new ExceptionInInitializerError(ex);
}
}
return sessionFactory;
}
}

6. Manipulation d’une base de données à partir d’hibernate

Créez et testez la classe Application contenant le code suivant :

public class Application {


/**
* Attribute declaration for factory to share between methods.
*/
private static SessionFactory factory;

public static void main(String[] args) {


// Open connection pool
factory = HibernateUtil.getSessionFactory();
Session session = factory.openSession();
Transaction transaction = session.beginTransaction();

// SQL queries : single and list results


String sql1 = "SELECT VERSION()";
String result1 = (String)
session.createNativeQuery(sql1).getSingleResult();
System.out.println("Result1 ==> " + result1);
String sql2 = "SHOW TABLES";
List result2 = session.createNativeQuery(sql2).getResultList();
System.out.println("Result2 ==> ");
for (Object temp : result2) {
System.out.println(temp);
}
// Insert record :
int randomNumber = new Random().nextInt(100);
String sql3 = "INSERT INTO product VALUES (null, 'Name_" +
randomNumber + "' , " + randomNumber + ")";
int result3 = (int) session.createNativeQuery(sql3).executeUpdate();
System.out.println("Result3 ==> " + result3);

transaction.commit();
session.close();
// Cleaning up connection pool
factory.close();
}
}

Page 3|4
7. Opérations CRUD

Mettez à jour le code source de la classe Application de sorte à pouvoir ajouter, mettre à
jour, supprimer et afficher les produits en interaction avec la base de données.
Le nouveau code de main devrait avoir alors cette allure :

public static void main(String[] args)


{
// Open connection pool
factory = HibernateUtil.getSessionFactory();

// CRUD calls examples


addProduct("product 1", 250);
addProduct("product 2", 600);
listProducts();
updateProduct(1, "produit 1", 300);
updateProduct(2, "produit 2", 650);
listProducts();
deleteProduct(1);
listProducts();

// Cleaning up connection pool


factory.close();
}

public static void addProduct(String name, int price)


{
Session session = factory.openSession();
Transaction transaction = null;
Try {
transaction = session.beginTransaction();
// insert new product
Product product = new Product();
product.setName(name);
product.setPrice(price);
System.out.println("Infos product :"+product.getId()+"-
"+product.getName()+"-"+product.getPrice());
int inserted_id = (Integer) session.save(product);
System.err.println("Inserted ID : " + inserted_id);

transaction.commit();

} catch (Exception e) {
if (transaction != null) {
transaction.rollback();
}
//e.printStackTrace();
System.out.println("ERROR: " + e.getMessage());
} finally {
session.close();
}
}

En adoptant la même démarche, implémentez les autres méthodes : listProducts,


updateProduct et deleteProduct.

Page 4|4

Vous aimerez peut-être aussi