0% ont trouvé ce document utile (0 vote)
148 vues10 pages

Introduction à Hibernate et ORM

Ce document décrit l'architecture et les fonctionnalités d'Hibernate, un framework Java populaire pour la persistance des objets. Il explique comment mapper des classes Java vers des tables de base de données, utiliser des requêtes HQL et gérer les associations entre objets.

Transféré par

BI bi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
148 vues10 pages

Introduction à Hibernate et ORM

Ce document décrit l'architecture et les fonctionnalités d'Hibernate, un framework Java populaire pour la persistance des objets. Il explique comment mapper des classes Java vers des tables de base de données, utiliser des requêtes HQL et gérer les associations entre objets.

Transféré par

BI bi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

06/04/2020

Mapping Objet Relationnel


Avec Hibernate

Objectifs d’Hibernate

• Que permet de faire Hibernate ?


• Hibernate s’occupe du transfert des classes Java dans les tables de la
base de données (et des types de données Java dans les types de
données SQL)
• Quel avantage est apporté par Hibernate ?
• Il réduit de manière significative le temps de développement qui
aurait été autrement perdu dans une manipulation manuelle des
données via SQL et JDBC.

1
06/04/2020

Architecture du noyau Hibernate

• Fichier de configuration
• Version XML :
• hibernate.cfg.xml permettant un
paramétrage plus fin
• Configuration par programmation

Architecture du noyau Hibernate

2
06/04/2020

Architecture du noyau Hibernate

• SessionFactory (org.hibernate.SessionFactory) :
• Cache immuable (threadsafe) des correspondances (mappings) vers une (et une
seule) base de données
• Coûteuse à construire car implique l’analyse des fichiers de Configuration
• Construite à partir d’un objet Configuration
• Session (org.hibernate.Session) :
• Objet mono-threadé, à durée de vie courte, représentant une conversation entre
l'application et l'entrepôt de persistance
• Encapsule une connexion JDBC
• Contient un cache des objets persistants

Architecture du noyau Hibernate

3
06/04/2020

Environnement Hibernate

• Bibliothèques Hibernate Core (en plus de hibernate3.jar) :


• antlr.jar
• ANTLR (Another Tool for Language Recognition) - Indispensable à l’exécution
• commons-collections.jar
• Bibliothèques du projet Apache Jakarta Commons pour manipuler les
collections - Indispensable à l’exécution
• Jta.jar
• API JTA strandard – requis pour les applications s’exécutant en dehors d’un
serveur d’application
• dom4j.jar
• Analyseur Syntaxique de configuration XML et de mapping - Indispensable à
l’exécution
• log4j jar
• log4j.Mécanisme de log sous-jacent pouvant être utilisé par Commons Logging -
Optionnel

Configuration d’Hibernate

• Déclaration du type de document utilisé par l’analyseur syntaxique


(parseur) XML pour valider le document de configuration d’après la
DTD de configuration d’Hibernate :
<?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">
• Paramètres de configuration nécessaires pour la connexion JDBC :
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/orm
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect
</property>

4
06/04/2020

Environnement Hibernate

• Fichiers nécessaires avec Hibernate Core :


• hibernate.cfg.xml : fichier de configuration globale contenant
• Les paramètres de connexion à la base de données (pilote, login, mot de passe,
url, etc.)
• Le dialecte SQL de la base de données
• La gestion de pool de connexions
• Le niveau de détails des traces etc.
• Pour chaque classe persistante :
• ClassePersistante.java : Implémentation POJO (Plain Old Java Objects) de la
classe
• ClassePersistante.hbm.xml : Fichier XML de correspondance (mapping)
• ClassePersistanteHome.java : Implémentation du DAO (Data Access Object)
pour l’isolation avec la couche de persistance – Optionnel

Classes persistantes

• Objets persistants implémentés sous la forme de POJO


• Pas d’implémentation de certaines interfaces d’héritage de classes
particulières
• Des règles à respecter :
• Implémenter un constructeur sans paramètre (pouvant être privé mais
de préférence accessible par le paquetage)
• Fournir une propriété d'identifiant (optionnel mais fortement
recommandé)
• Implémenter des modificateurs (mutateurs - setter) et accesseurs(getter)
pour chaque champ persistant

10

10

5
06/04/2020

Manipuler les objets persistantes

SessionFactory sf= new Configuration().configure().buildSessionFactory();


sf.openSession();
Transaction tx = null;
Session session=sf.getCurrentSession();
try {tx = session.beginTransaction();
Employer c1 = new Employer(“Sabeur", “Elkosantini",100f);
session.save(c1);
session.flush();
tx.commit();
} catch (Exception e) {
if (tx != null) {
tx.rollback();
sf.close();}}
11

11

Diagramme d’états des objets d’une classe persistante

* Méthodes JPA - implémentées dans Hibernate EntityManager mais pas dans


Hibernate Core
12

12

6
06/04/2020

Correspondance des associations

• Partie la plus complexe dont dépend les performances de l’application


• Balises de correspondance des collections : <set>, <list>; <map>, <bag>,
<array> …
• Tags de correspondance des cardinalités/multiplicités : <one-to-one>,
<many-to-one>, <one-to-many>, <many-to-many>
• Associations uni ou bi directionnelles

13

13

Requête HQL

• "Langage de requêtes orientées objet" ou encapsulation du SQL


selon une logique orientée objet
• Requêtes HQL (et SQL natives) représentées avec une instance
de org.hibernate.Query
• Obtention d’une Query en utilisant la Session courante :
session.createQuery (string)
• Clauses : from, select, where
• Invocation de la méthode list() ⇒ retour du résultat sous forme
de liste
Query req = session.createQuery("from Module");
List modules=req.list();

14

14

7
06/04/2020

Requête HQL

• Interface Query fournit deux méthodes pour récupérer un sous


ensemble du résultat. Très utile pour la pagination.
Query req = session.createQuery("from Module");
req.setFirstResult(20);// premier enregistrement(commence
par 0)
req.setMaxResults(10);// nombre d’enregistrement
List modules=req.list();
• Avec HQL on peut ajouter des paramètres à la requête
Query req = session.createQuery("from Module where id=?");
Req.setInt(0,100);
List modules=req.list();

15

15

Requête HQL

• Autre méthode
Query req = session.createQuery("from Module where
id=:id_m");
Req.setInt(id_m,100);
List modules=req.list();
• from :
• Clause suivie d’un nom de classe et non de la relation de BD :
from Module
• Utilisation des alias
Query req = session.createQuery("from Module as m where
m.id=:id_m");

16

16

8
06/04/2020

Requête HQL

• join :
• Pour exécuter des jointures (inner join)
Select e from Enseignant e join e.department Departement
where Department.nom = “Etude”
• Where:
• Equivalent à celle de SQL, on peut utiliser and, or et not
from Enseignant e where e.nom like ‘%M%’ and e.salaires
between 100 and 200;
• Utilisation de null
from Enseignant e where e.department is not null

17

17

Requête SQL native

• Pour utiliser des requêtes optimisées et tirer partie des


spécificités du SGBD utilisé
• Requêtes natives du noyau
session.createSQLQuery("SELECT * FROM PERSON").list();
• Retourne une liste d’Object[] avec des valeurs scalaires pour
chaque colonne de la table PERSON (i.e. retourne une table
comme pour les requêtes classiques JDBC)
session.createSQLQuery("SELECT * FROM PERSON")
.addEntity(Person.class);
• Retourne une liste d’objets de la classe Person

18

18

9
06/04/2020

Exercice

• Application de gestion de personnels d’une société:


✓Page d’ajout d’un nouveau département (id, nom)
✓Page d’ajout d’un nouveau personnel (id, nom, prénom, âge)
✓Page de recherche d’un personnel par son id (un formulaire ayant un
seul champ)
✓Page avec un formulaire ayant un seul champs (âge) qui permet de
recherche de tous les personnels ayant un âge supérieur à la valeur
saisit
✓UNE SEULE servlet Traitement

Pour développer cette application, utiliser les tags JSTL et Hibernate

19

19

10

Vous aimerez peut-être aussi