Vous êtes sur la page 1sur 17

ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies

TP2(Hibernate)

1) Mise en place d’hibernate :

On utilise pur ce TP « hibernate-distribution-3.3.2.GA », on commence donc à extraire le


fichier « hibernate-distribution-3.3.2.GA.rar » :

Maintenant nous allons créer sous éclipse un nouveau projet java qui va traiter nos objets métiers et
stocker leurs données relatives dans notre base de données.

1) Création du nouveau projet :


Lancer eclipse.

File->New->Project
Java->JavaProject

Puis « Next », l’assistant vous demandera le nom du projet : « PremierHibernate»


Cliquer sur « Finish ».
Vous verrez alors le nouveau projet au niveau du Package explorer (à gauche).
Clique droit sur le repertoir SRC du projet, puis New->package.
Nom du package : « org.esprit.hibernate.persistance »

1
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies

2) Mise en place d’une librairie utilisateur : Hibernate :

Window->Preferences, une fenêtre s’affiche:

Java->BuildPath-> User
Libraries puis appuiez sur
“New”.
Nom : Hibernate puis OK.
La nouvelle librairie
s’affiche.
Choisissez « Add Jars »

Parcourir le repertoire ou vous avez extrait hibernate jusqu'à trouver le fichier : hibernate3.jar.

Puis «Load ». Idem pour les fichiers qui se trouve sous le repertoire « \lib\required »

Enfin « OK ».

2
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies

3) Relier le Projet à la librairie :


Choisir la racine du projet->properties->Java BuildPath
L’onglet « Libraries » puis « Add Library ».

Choisissez « User Library » puis, « Next »une liste des librairies s’affiche ,choisissez les
librairie Mysql (voir TP1) et hibernate, puis« Finish »

4) Création du fichier de configuration :

Cliquer sur le projet «PremierHibernate » puis clique droit  new  Source Folder

Nom du répertoire : META-INF puis ok.

Clique droit sur META-INF puis newotherXMLXML.

Nom du Fichier : hibernate.cfg.xml

3
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies

Voici son contenu (On suppose que vous avez déjà créé une base de données qui se nomme
« hibernate » avec un utilisateur et un mot de passe (voir TP1)) :

<?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>

<property
name="connection.url">jdbc:mysql://localhost/hibernate</proper
ty>
<property name="connection.username">esprituser</property>
<property name="connection.password">espritpwd</property>

<property
name="connection.driver_class">com.mysql.jdbc.Driver</property
>

<property
name="dialect">org.hibernate.dialect.MySQLDialect</property>

<property name="hbm2ddl.auto">update</property>

<property
name="transaction.factory_class">org.hibernate.transaction.JDB
CTransactionFactory</property>
<!-- thread is the short name for
org.hibernate.context.ThreadLocalSessionContext
and let Hibernate bind the session automatically to the
thread
-->

<property
name="current_session_context_class">thread</property>

<!-- this will show us all sql statements -->


<property name="hibernate.show_sql">true</property>

<!-- mapping files -->

</session-factory>
</hibernate-configuration>

4
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies

Maintenant creer un nouveau fichier qui se nomme « log4j.properties » :

Projet : clique droitnewotherGeneralfile

### direct log messages to stdout ###

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L -
%m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=debug, stdout

log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug

### log HQL query parser activity


#log4j.logger.org.hibernate.hql.ast.AST=debug

### log just the SQL


log4j.logger.org.hibernate.SQL=debug

### log JDBC bind parameters ###


log4j.logger.org.hibernate.type=info

### log schema export/update ###


log4j.logger.org.hibernate.tool.hbm2ddl=info

### log HQL parse trees


#log4j.logger.org.hibernate.hql=debug

### log cache activity ###


log4j.logger.org.hibernate.cache=info

### log transaction activity


#log4j.logger.org.hibernate.transaction=debug

### log JDBC resource acquisition


#log4j.logger.org.hibernate.jdbc=debug

### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trac
e

5
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies

1) Les classes persistantes :

* 1 1 *
Enseignant Ecole Evénement
*
*
*
*
*
Fournisseur Etudiant
Actionnaire

-Ajouter les classes suivantes dans le sous package: « persistance » :

class Ecole

package com.esprit.hibernate.persistance;

import java.util.List;

public class Ecole {

private int num;


private String nom;
private String address;
private int nombreSalles;
private List<Enseignant> enseignants;
private List<Etudiant> etudiants;
private List<Fournisseur> fournisseurs;
private List<Actionnaire> actionnaires;

public String getNom() {return nom;}

public void setNom(String nom) { this.nom = nom;}

public String getAdresse() {return address;}

public void setAdresse (String address) {this.address =


address;}

public int getNombreSalles() {return nombreSalles;}

public void setNombreSalles(int nombreSalles)


{this.nombreSalles = nombreSalles;}

public void setNum(int num) {this.num = num;}

6
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies

public int getNum() {return num;}

public String toString(){


return ("-------------------------------\n" +
"Nom: "+nom+"\n Adresse: "+address+
"\n Nombre de salles:"+nombreSalles);}
public void setEnseignants(List<Enseignant> enseignants) {
this.enseignants = enseignants;
}
public List<Enseignant> getEnseignants() {
return enseignants;
}
public void setEtudiants(List<Etudiant> etudiants) {
this.etudiants = etudiants;
}
public List<Etudiant> getEtudiants() {
return etudiants;
}
public void setFournisseurs(List<Fournisseur> fournisseurs) {
this.fournisseurs = fournisseurs;
}
public List<Fournisseur> getFournisseurs() {
return fournisseurs;
}
public void setActionnaires(List<Actionnaire> actionnaires) {
this.actionnaires = actionnaires;
}
public List<Actionnaire> getActionnaires() {
return actionnaires;
}
}

package com.esprit.hibernate.persistance;
import java.util.List;

public class Actionnaire {

private int id;


private String nom;
private List<Ecole> ecoles;
public int getId() { return id;}
public void setId(int id) {this.id = id;}
public String getNom() {return nom;}
public void setNom(String nom) {this.nom = nom;}
public List<Ecole> getEcoles() {return ecoles;}
public void setEcoles(List<Ecole> ecoles) {this.ecoles =
ecoles;}

}
package com.esprit.hibernate.persistance;
7
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies

public class Enseignant {

private String ncin;


private String nom;
public String getNcin() {
return ncin;
}
public void setNcin(String ncin) {
this.ncin = ncin;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}

package com.esprit.hibernate.persistance;

public class Etudiant {

private Ecole ecole;


private int id;
private String nom;

public void setEcole(Ecole ecole) {this.ecole =


ecole;}
public Ecole getEcole() { return ecole;}
public void setId(int id) {this.id = id;}
public int getId() {return id;}
public void setNom(String nom) {this.nom = nom;}
public String getNom() {return nom;}

8
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies

package com.esprit.hibernate.persistance;

import java.util.Date;

public class Evennement {


private Ecole ecole;
private int id;
private String titre;
private Date date;

public int getId() {return id;}

public void setId(int id) { this.id = id;}

public String getTitre() { return titre;}

public void setTitre(String titre) {this.titre =


titre;}

public Date getDate() {return date;}

public void setDate(Date date) { this.date = date;}

public void setEcole(Ecole ecole) { this.ecole =


ecole;}

public Ecole getEcole() { return ecole;}

package com.esprit.hibernate.persistance;

public class Fournisseur {

private String nom;


public void setNom(String nom) {this.nom = nom;}
public String getNom() {return nom;}
}

9
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies

Maintenant il faut rendre ces classes « mappé » c.a.d créer pour chaque classe un fichier

« --------.hbm.xml » :

Ecole.hbm.xml:

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


<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package
="com.esprit.hibernate.persistance">
<class name="Ecole" table="T_ECOLE">

<id name="num" type="int" column="Ecole_num">


<generator class="native"/>
</id>

<property name="nom" type="string" column="Ecole_nom"/>


<property name="adresse" type="string"
column="Ecole_adresse"/>

<property name="nombreSalles" type="int"


column="Ecole_nb_salles"/>

<bag name="enseignants" cascade="all">


<key column="FK_Ecole"/>
<one-to-many class="Enseignant" ></one-to-many>
</bag>

<bag name="etudiants" cascade="all">


<key column="FK_ECOLE"></key>
<one-to-many class="Etudiant"/>
</bag>

<bag name="fournisseurs" table="ECOLE_FOURNISSEUR"


cascade="all">
<key column="FK_ECOLE"></key>
<many-to-many column="FK_FOURNISSEUR"
class="Fournisseur"></many-to-many>
</bag>

<bag name="actionnaires" table="ECOLE_ACTIONNAIRE"


cascade="all">
<key column="FK_ECOLE"></key>
<many-to-many column="FK_ACTIONNAIRE"
class="Actionnaire"></many-to-many>
</bag>

</class></hibernate-mapping>

10
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies

Enseignant.hbm.xml:

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


<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package
="com.esprit.hibernate.persistance">
<class name="Enseignant" table="T_Enseignant">

<id name="ncin" type="string" column="Ens_ncin">


</id>

<property name="nom" type="string" column="Ens_nom"/>

</class></hibernate-mapping>

Etudiant.hbm.xml:

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


<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package
="com.esprit.hibernate.persistance">
<class name="Etudiant" table="T_Etudiant">

<id name="id" type="int" column="etd_id">


<generator class="increment"></generator>
</id>

<property name="nom" type="string" column="etd_nom"/>


<many-to-one name="ecole" column="FK_ECOLE"></many-to-one>
</class>

</hibernate-mapping>

Evennement.hbm.xml:

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


<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

11
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.esprit.hibernate.persistance">

<class name="Evennement" table="T_Evennement">

<id name="id" type="int" column="Even_ID">


<generator class="native"/>
</id>

<property name="titre" type="string" column="EVEN_TITRE"/>


<property name="date" type="timestamp" column="EVEN_DATE"/>

<many-to-one name="ecole" column="FK_ECOLE"


cascade="all"></many-to-one>
</class>

</hibernate-mapping>

Fournisseur.hbm.xml:

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


<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package
="com.esprit.hibernate.persistance">
<class name="Fournisseur" table="T_Fournisseur">
<id name="nom" type="string" column="FRN_NOM">
</id>
</class>
</hibernate-mapping>

12
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies

Actionnaire.hbm.xml:

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


<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package
="com.esprit.hibernate.persistance">
<class name="Actionnaire" table="T_ACTIONNAIRE">

<id name="id" type="int" column="ACT_ID">


<generator class="native"/>
</id>

<property name="nom" type="string" column="ACT_NOM"/>

<bag name="ecoles" table="ECOLE_ACTIONNAIRE" inverse="false"


cascade="all">
<key column="FK_ACTIONNAIRE"></key>
<many-to-many column="FK_ECOLE" class="Ecole"></many-to-many>

</bag>
</class>
</hibernate-mapping>

Maintenant il faut ajouter ceci à Hibernate.cfg.xml pour rendre les classes mappés :

<mapping
resource="com/esprit/hibernate/persistance/Ecole.hbm.xml"/>
<mapping
resource="com/esprit/hibernate/persistance/Evennement.hbm.xml"
/>
<mapping
resource="com/esprit/hibernate/persistance/Enseignant.hbm.xml"
/>
<mapping
resource="com/esprit/hibernate/persistance/Etudiant.hbm.xml"/>
<mapping
resource="com/esprit/hibernate/persistance/Fournisseur.hbm.xml
"/>
<mapping
resource="com/esprit/hibernate/persistance/Actionnaire.hbm.xml
"/

13
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies

Manipulation et test :

1) Créer un package « org.esprit.hibernate.tests »

Voici une classe qui test la création du shéma.

package com.esprit.hibernate.test;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class DdlTest {

public static void main(String[] args) {


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

Voici une classe qui teste l’ajout d’une nouvelle école (avec un fournisseur) :

package com.esprit.hibernate.test;

import java.util.ArrayList;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.esprit.hibernate.persistance.Ecole;
import com.esprit.hibernate.persistance.Fournisseur;

public class EcoleFournisseurInsertionTest {

public static void main(String[] args) {


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

Session session=sf.getCurrentSession();
sf.openSession();

Transaction tx=session.beginTransaction();

14
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies

Ecole ec=new Ecole();


ec.setNom("ESPRIT");
ec.setNombreSalles(35);
Fournisseur fr1=new Fournisseur();
fr1.setNom("ALLANI");
ec.setFournisseurs(new ArrayList<Fournisseur>());
ec.getFournisseurs().add(fr1);
session.save(ec);
session.flush();
tx.commit();
}
}

Cette classe liste les écoles a partir d’un fournisseur :

package com.esprit.hibernate.test;

import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.esprit.hibernate.persistance.Actionnaire;
import com.esprit.hibernate.persistance.Ecole;

public class EcoleListingFromFournisseurTest {

/**
* @param args
*/
public static void main(String[] args) {
SessionFactory sf=new Configuration().configure()
.buildSessionFactory();

15
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies

Session session=sf.getCurrentSession();

sf.openSession();

Transaction tx=session.beginTransaction();
Ecole e1;
e1=(Ecole)session.load(Ecole.class,1 );
Actionnaire
act1=(Actionnaire)session.load(Actionnaire.class,1 );
for (Ecole e:act1.getEcoles()){
Logger.getRootLogger().warn(e.getNom());

Logger.getRootLogger().warn("____________________");
}

tx.commit();
}
}

Insertion d’un eseignant Avec une ecole existante:

package com.esprit.hibernate.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.esprit.hibernate.persistance.Ecole;
import com.esprit.hibernate.persistance.Enseignant;

public class InsertionEnseignantAecoleExistante {

/**
* @param args
*/
public static void main(String[] args) {
//EcoleInsertionTest.main(args);

SessionFactory sf=new Configuration().configure()


.buildSessionFactory();

Session session=sf.getCurrentSession();

16
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies

sf.openSession();

Transaction tx=session.beginTransaction();

Ecole e=(Ecole) session.load(Ecole.class, 1);


Enseignant ens1=new Enseignant();
ens1.setNcin("00987");
ens1.setNom("Foulen1");

Enseignant ens2=new Enseignant();


ens2.setNcin("005678");
ens2.setNom("Foulen2");

e.getEnseignants().add(ens1);
e.getEnseignants().add(ens2);

session.saveOrUpdate(e);
tx.commit();

17
TP 2- Hibernate (Architectures n-tiers JEE)

Vous aimerez peut-être aussi