Académique Documents
Professionnel Documents
Culture Documents
Framework de persistance
(Hibernate)
I. Introduction à Hibernate
Hibernate est un Framework Java de persistance qui permet de faire correspondre des tables de
base de données relationnelles avec des objets java.
Une fois la correspondance entre les deux mondes définie, le programme Java peut manipuler
toutes les données en utilisant que des JavaBean, masquant alors totalement la base de données
sous-jacente et ses spécificités. Le Framework assure le remplissage de ces objets et la mise à
jour de la base en se basant sur leur contenu.
Hibernate est un Framework de mapping Objet/Relationnel pour applications JAVA (et .NET
avec Nhibernate).
1
Tutorial « Framework de persistance : Hibernate
L'architecture d'Hibernate
• Une classe de type JavaBean qui encapsule les données d'une table donnée nommée «
classe de persistance ».
• Des propriétés de configuration, notamment des informations concernant la connexion
à la base de données. Définit dans un fichier de configuration.
• Un fichier de correspondance qui configure la correspondance entre la classe et la table.
2
Tutorial « Framework de persistance : Hibernate
NB : vous pouvez utiliser NetBeans pour créer la base de données ou un client comme
mySQLWorkbench. Je vais vous présenter par la suite comment créer une table avec NetBeans.
Dans l’outil NetBeans, allez dans l’onglet service et clic-droit sur Base de données et demander
une nouvelle connexion.
1. Choisir le driver MYSQL étant donné qu’on souhaite manipuler une base de
données de type My SQL
2. Clique sur Next
3
Tutorial « Framework de persistance : Hibernate
3. Taper dans le champ password : root et cliquer sur Next et Next et finish
Cet écran contient les informations pour se connecter à une base de données et ceci concerne :
4. Clic-droit sur le lien que vous venez de créer et choisir « execut command ».
5. Taper la commande pour créer une base de données :
« Create database GestionProduits ; »
6. Allez dans « other databases » et cliquer droit sur la base de données que vous venez
de créer et sélectionner « Set As Defautl Catalog » ➔ ceci permet de sélectionner
cette base de données afin de la manipuler.
7. Clic-droit sur tables et choisir « Create Table ».
4
Tutorial « Framework de persistance : Hibernate
NB : Netbeans étant un client léger pour la gestion des bases de données, la contrainte qui
correspond à gérer l’identifient « id » en auto-increment n’étant pas pris en charge. Pour cela,
vous pouvez l’ajouter dans l’utilitaire « execut command » en exécutant la requête suivant :
Pour une meilleure organisation, nous allons créer des packages en suivant l’architecture
d’hibernate comme suit :
5
Tutorial « Framework de persistance : Hibernate
Dans le package classes.javabeans, créer une classe « Produit » qui encapsulent les données,
cette classe doit avoir les mêmes champs que la table « produit » que vous avez créez au niveau
de votre base de données ainsi que les accesseurs et les modificateurs. Vous auriez aussi besoin
de définir un constructeur vide et un autre avec les attributs « code et libellé ».
3. Fichiers de configuration
Une fois la base de données et la table sont créées ainsi que la classe permettant d’encapsuler
les données. Nous allons commencer la configuration d’hibernate pour l’exécuter.
Pour cela, il faut fournir un certain nombre de propriétés concernant la configuration pour qu'il
puisse se connecter à la base de données.
6
Tutorial « Framework de persistance : Hibernate
Dans cet exemple, nous allons utiliser le fichier Hibernate.cfg.xml. Pour créer un fichier de
configuration Hibernate :
4. taper Next et Next et choisir le chemin de la base de données que vous avez creér.
7
Tutorial « Framework de persistance : Hibernate
Dans l’onglet « jdbc properties » renseigner les informations relatives à la connexion à la base
de données « GestionDesProduits »
En naviguant sur l’onglet source, le fichier de configuration est définit en format XML comme
suit :
8
Tutorial « Framework de persistance : Hibernate
Vous allez remarquer que la création de ce fichier a automatiquement intégrer l’ensemble des
jar nécessaire pour l’exécution d’hiberante. En plus du driver JDBC pour la connexion à une
base de données MySQL.
NB : chaque classe de persistance correspond à un fichier de mapping qui porte le même nom de la
classe avec l’extention hbm.xml.
9
Tutorial « Framework de persistance : Hibernate
3. Choisir la classe persistance ainsi que la table concernée dans la base de données
Ceci a permis de mapper la classe avec la table dans la base de données, il reste à mapper les attributs
avec chaque champ dans la table produit. Pour cela, dans la balise <class> des balises property pour
définir pour chaque propriété, le nom de la colonne correspondante dans la table produit.
Hibernate supporte aussi les identifiants générés par les bases de données, globalement uniques
« native », ainsi que les identifiants assignés par l'application « assigned ».
NB : si vous revenez dans le fichier de configuration, vous allez remarquer que hibernate a intégré
automatiquement le fichier de mapping que vous venez de créer.
10
Tutorial « Framework de persistance : Hibernate
5. Démarrage d’hibernate
Il est temps de charger et de stocker quelques objets « produit », pour ce faire, nous devons compléter
la configuration avec du code d'infrastructure en utilisant une classe « HibernateUtil.java ».
La classe HibernateUtil utilise une SessionFactory qui permet d’établir la connexion avec la source de
données à partir du fichier de configuration « hibernate.cfg.xml ». La classe SessionFactory serait
instanciée autant de fois qu'il y a des demandes de connexion à la base, il est donc plus adapté de rendre
une même instance de SessionFactory accessible par ces demandes.
Cette classe possède une méthode appelée getSessionFactory() qui retourne la session hibernate en cours
si elle existe sinon elle se charge d’ouvrir une nouvelle session.
Nous créerons une classe d'aide HibernateUtil qui s'occupe du démarrage et rend la gestion des Sessions
plus facile. Cela est possible via l’outil Netbeans.
11
Tutorial « Framework de persistance : Hibernate
Pour commencer, il faut commencer par la création d’un objet sessionFactory pour ouvrir une connexion
à la base de données. Ceci se fait en utilisant la méthode getSessionFactory de HibernateUtil.
Pour chaque exemple, une requête SQL de type Insert, Update, Delete ou select sera générée
automatiquement. Et chaque requête correspond à une transaction pour cela, on doit demander de
commencer une transaction avec l’instruction « Transaction tx = session.beginTransaction() » et à la fin
du traitement, nous devons envoyé un commit pour la validation de la transaction via la méthode
« tx.commit() »
Créer une classe « ProduitService.java » contenant les méthodes d’insertion, de mise à jour, de
suppression et de liste des produits. Ces méthodes doivent être statiques.
12
Tutorial « Framework de persistance : Hibernate
La méthode session.load() est utilisée afin de charger un objet de la base de données et remplir ses
attributs. Cette méthode prend deux arguments :
Cette méthode rend un objet de type Object que vous pouvez caster avec la classe concernée.
Dans une requête de type « select » pour pouvez intégrer des clauses where en utilisant le Le langage de
requêtage d’hibernate « HQL ». Ci-dessous un lien pour tutoriel d’utilisation de ce langage.
https://www.tutorialspoint.com/hibernate/hibernate_query_language.htm
13
Tutorial « Framework de persistance : Hibernate
Exemple : nous allons créer une méthode dans la classe « ProduitService.java » qui permet de trouver
un produit en donnant son code :
Vous pouvez vérifier les requêtes SQL qui ont été générées automatiquement dans la console. Ceci se
fait en activant la propriété du fichier de configuration.
<property name="show_sql">true</property>
}
}
14
Tutorial « Framework de persistance : Hibernate
Il existe d’autres méthodes pour définir un modèle O/R autre que les fichiers de mapping et ceci se fait
via des annotations directement intégrées au code java.
Exemple d’annotations :
a) Les entités
Une entité, déclarée par l’annotation @Entity définit une classe Java comme étant persistante et donc
associée à une table dans la base de données. Cette classe doit être implantée selon les normes des beans:
propriétés déclarées comme n’étant pas publiques (private ), et accesseurs avec set et get, nommés selon
les conventions habituelles.
Par défaut, une entité est associée à la table portant le même nom que la classe. Il est possible d’indiquer
le nom de la table par une annotation @Table. Exemple de la table produit
@Entity
@Table(name="produit")
public class Produit {
...
}
L’identifiant est indiqué avec l’annotation @Id. Pour produire automatiquement les valeurs
d’identifiant, on ajoute une annotation @GeneratedValue avec un paramètre Strategy. Voici deux
possibilités pour ce paramètre:
15
Tutorial « Framework de persistance : Hibernate
@Id
@GeneratedValue(Strategy = GenerationType.AUTO)
private Integer id;
private void setId(Integer i) { id = i; }
public Integer getId() { return id; }
@Id
@GeneratedValue(Strategy = GenerationType.IDENTITY)
private Integer id;
c) Les colonnes
Par défaut, toutes les propriétés non-statiques d’une classe-entité sont considérées comme devant être
stockées dans la base. Pour indiquer des options (et aussi pour des raisons de clarté à la lecture du code)
on utilise le plus souvent l’annotation @Column, comme par exemple:
@Column (name="code")
private String Code;
public void setCode(String n) {code= n;}
public String getCode() {return code;}
@Column (name="libelle")
private String libelle;
public void setLibelle(String n) {libelle= n;}
public String getLibelle() {return libelle;}
Cette annotation est utile pour indiquer le nom de la colonne dans la table, quand cette dernière est
différente du nom de la propriété en java.
Dans un objet métier, on peut très bien avoir des propriétés que l’on ne souhaite pas rendre persistantes
dans la base. Il faut alors impérativement les marquer avec l’annotation @Transient.
16
Tutorial « Framework de persistance : Hibernate
Une fois la classe de persistance a été créée, il faut l’intégrer dans le fichier de configuration. Pour cela,
il faut ajouter dans la balise <sessionFactory>.
<mapping class="classes.javabeans.Vente"/>
Exercice :
Nous allons créer une classe vente en utilisant les annotations pour la mapper avec la table vente de la
base de données. Définir les accesseurs et les modificateurs ainsi que les constructeurs.
Pour avoir plus de documentation sur les annotations du mapping, vous pouvez consulter le lien ci-
dessous :
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html
17
Tutorial « Framework de persistance : Hibernate
On souhaite créer une application pour la gestion des étudiants, pour ce faire nous proposons le
diagramme de classe suivant :
18