Académique Documents
Professionnel Documents
Culture Documents
Hibernate
MAAJI Adam
1/36
Introduction
Hibernate :
Framework Java
Gestion de persistance des objets dans les BD relationnelles
Solution pour faire le lien entre la programmation objet et
les SGBD :
les acc`es `a la base de donnees sont geres par des objets et
des methodes Java.
les JavaBean masquent la structure et les specificites de la
BD.
Architecture
Elements necessaires :
Classe de persistance : une classe de JavaBean
pour lencapsulation des donnees dune table.
Correspondance entre la classe et la table : fichier de
mapping.
Proprietes de configuration : Informations permettant
la connexion `a la BD.
Architecture
Architecture
Application
Proprits de configuration
Hibernate
Bases de donnes
4/36
Persistance
Plusieurs aspects :
Connexion `a la BD
Creation de tous les objets ou uniquement de ceux
necessaires
Transformation (mapping ) de la structure de la BD
pour ladapter aux objets
Chargement en memoire des donnees en une seule fois ou
au fur et `a mesure
Hibernate : Framework en charge de la persistance des donnees
dans une application Web
Configuration
<? x m l v e r s i o n = 1 . 0 ?>
<! DOCTYPE h i b e r n a t e m a p p i n g PUBLIC
// H i b e r n a t e /H i b e r n a t e M a p p i n g DTD 3 . 0 / / EN
h t t p : / /h i b e r n a t e . s o u r c e f o r g e . n e t /h i b e r n a t e m a p p i n g 3 . 0 . d t d >
<h i b e r n a t e m a p p i n g>
< c l a s s name= e v e n t s . E v e n t t a b l e =EVENTS>
<i d name= i d c o l u m n= EVENT ID >
<g e n e r a t o r c l a s s = n a t i v e />
</i d>
<p r o p e r t y name= d a t e t y p e= t i m e s t a m p c o l u m n=EVENT DATE />
<p r o p e r t y name= t i t l e />
10/36
Explications
Propriete title :
le nom de la propriete est le nom de la colonne
determination du type de mapping et de la conversion par
Hibernate
Propriete date :
attribut column : correspondance avec la colonne EVENT DATE
(date pouvant etre reserve)
attribut type : specification du type de mapping et de la
conversion
Balise set : definition dune association (table PERSON EVENT)
NB : le mapping pour la table PERSON est `a ecrire
Configuration de Hibernate
Fichier hibernate.properties ou
hibernate.cfg.xml (prioritaire) Balise hibernate-
configuration : configuration de hibernate pour
lapplication courante
Balise session-factory : Fabrique de session
Definition des param`etres de connexion
Pilote du SGBD (propriete connection.driver class)
<h i b e r n a t e c o n f i g u r a t i o n>
<s e s s i o n f a c t o r y>
<! D a t a b a s e c o n n e c t i o n s e t t i n g s >
<p r o p e r t y name= c o n n e c t i o n . d r i v e r c l a s s >o r g . h s q l d b . j d b c D r i v e r</ p r o p e r t y>
<p r o p e r t y name= c o n n e c t i o n . u r l > j d b c : h s q l d b : h s q l : / / l o c a l h o s t</ p r o p e r t y>
<p r o p e r t y name= c o n n e c t i o n . u s e r n a m e >s a</ p r o p e r t y>
<p r o p e r t y name= c o n n e c t i o n . p a s s w o r d ></ p r o p e r t y>
<! E n a b l e H i b e r n a t e s a u t o m a t i c s e s s i o n c o n t e x t m a n a g e m e n t >
<p r o p e r t y name= c u r r e n t s e s s i o n c o n t e x t c l a s s > t h r e a d </ p r o p e r t y >
<! D i s a b l e t h e s e c o n dl e v e l c a c h e >
<p r o p e r t y name= c a c h e . p r o v i d e r c l a s s > o r g . h i b e r n a t e . c a c h e . N o C a c h e P r o v i d e r
</ p r o p e r t y >
17/36
Mise en uvre
<! D r o p a n d r ec r e a t e t h e d a t a b a s e s c h e m a o n s t a r t u p >
<p r o p e r t y name= h b m 2 d d l . a u t o >c r e a t e</ p r o p e r t y>
18/36
Classe de persistance
Classe JavaBean
Utilisation de convention de nommage JavaBean pour
les methodes getter et setter
Visibilite des champs : privee
Visibilite de la classe : public recommandee
Contraintes :
Propriete obligatoire : id
Constructeur sans argument obligatoire
Mise en uvre
im p o r t j a v a . u ti l . ;
p u b l i c c l a s s Even t {
p r i v a te L o ng i d ;
p r i v a te S t r i n g t i t l e ;
p r i v a te D at e d a t e ;
p u b l i c E v e n t ( ) {}
p u b l i c Long g e tI d ( ) {
r e tu r n i d ;
}
p r i v a te v o i d s e t I d ( Long i d ) {
th i s . i d = i d ;
}
p u b l i c Date g e t D a t e ( ) {
r e tu r n d a t e ;
}
p u b l i c v o i d s e t D a t e ( Date d a t e ) {
th i s . d a t e = d a t e ;
}
20/36
Exemple de classe de persistance
p u b l i c S tr i n g g e tT i tl e ( ) {
r e tu r n t i t l e ;
}
p u b l i c v o i d s e tT i tl e ( S tr i n g t i t l e ) {
th i s . t i t l e = t i t l e ;
}
p r i v a t e S e t p a r t i c i p a n t s = new H a s h S e t ( ) ;
p u b l i c S e t g e tP a r ti c i p a n ts ( ) {
r e tu r n p a r t i c i p a n t s ;
}
p u b l i c v o i d s e tP a r ti c i p a n ts ( S e t p a r ti c i p a n ts ) {
th i s . p a r ti c i p a n ts = p a r ti c i p a n ts ;
}
}
21/36
Gestion de la session
Fichier HibernateUtil.java
Demarrage de Hibernate
Creation de la fabrique de session SessionFactory
puis creation de la session (un thread )
Fichier HibernateUtil.java
p a ck a g e u ti l ;
im p o r t o r g . h i b e r n a te . ;
im p o r t o r g . h i b e r n a te . c f g . ;
public c la s s H i b e r n a te U ti l {
p r i v a te s ta ti c f i n a l S e s s i o n F a c to r y s e s s i o n F a c to r y ;
s ta ti c {
tr y {
// C r e a t e t h e S e s s i o n F a c t o r y f r o m h i b e r n a t e . c f g . xm l
s e s s i o n F a c t o r y = new C o n f i g u r a t i o n ( ) . c o n f i g u r e ( ) . b u i l d S e s s i o n F a c t o r y ( ) ;
} c a t c h ( T h rowa b le ex ) {
/ / Make s u r e y o u l o g t h e e x c e p t i o n , a s i t m i g h t b e s w a l l o w e d
Sys tem . e r r . p r i n tl n ( I n i t i a l S e s s i o n F a c to r y c r e a ti o n f a i l e d . + ex ) ;
t h r o w new E x c e p t i o n I n I n i t i a l i z e r E r r o r ( e x ) ;
}
}
p u b l i c s ta ti c S e s s i o n F a c to r y g e tS e s s i o n F a c to r y ( ) {
r e tu r n s e s s i o n F a c t o r y ;
}
}
23/36
Exemple dune class dexcution
from prcise la classe d'objets dont les from object from Personne as
occurrences [as pers
doivent tre retrouves. objectalias]
select prcise les proprits renvoyer. select pers.nom
Doit tre utilis avec une clause from Personne
from
try {
int compteur = ( (Integer) session.iterate("select
count(*) from Personnes").intValue();
System.out.println("compteur = " + compteur);
}
Exercice 2
Ingnierie inverse (reverse engineering)
La rtro-ingnierie, ou ingnierie inverse ou inverse, est
l'activit qui consiste tudier un objet pour en dterminer
le fonctionnement interne ou la mthode de fabrication. Le
terme quivalent en anglais est reverse engineering.
Il s'agit de :
comprendre le fonctionnement de l'objet, pour tre en
mesure de l'utiliser correctement, de le modifier, ou
encore de s'assurer de son bon fonctionnement.
crer un nouvel objet ayant des fonctionnalits
identiques l'objet de dpart.
Exercice 3