slt,
nous somme tous des débutants mon ami, et on veut que toutes les personnes se developpent rapidement avec ces tchnologies
voila la démarche de travail avec hibernate:
Hibernate a besoin de plusieurs éléments pour fonctionner :
* une classe de type javabean qui encapsule les données d'une occurence d'une table
* un fichier de correspondance qui configure la correspondance entre la classe et la table
* des propriétés de configuration notamment des informations concernant la connexion à la base de données
Une fois ces éléments correctement définis, il est possible d'utiliser Hibernate dans le code des traitements à réaliser.
Donc les étapes sont les suivantes:
1. La création d'une classe qui va encapsuler les données(javabean)
2. La création d'un fichier de correspondance ou de mapping
Pour assurer le mapping, Hibernate a besoin d'un fichier de correspondance (mapping file) au format XML qui va contenir des informations sur la correspondance entre la classe définie et la table de la base de données.
Même si cela est possible, il n'est pas recommandé de définir un fichier de mapping pour plusieurs classes. Le plus simple est de définir un fichier de mapping par classe, nommé du nom de la classe suivi par ".hbm.xml". Ce fichier doit être situé dans le même répertoire que la classe correspondante ou dans la même archive pour les applications packagées.
Différents éléments sont précisés dans ce document XML :
* la classe qui va encapsuler les données
* l'identifiant dans la base de données et son mode de génération
* le mapping entre les propriétés de classe et les champs de la base de données
* les relations
* ...
pour moi j'ai utilisé un fichier de mapping par table(Factures.hbm.xml---->la table factures) pour bien séparer les choses.
exemple d'un fichier de mapping que j'ai déja utilisé: "Factures.hbm.xml"
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Factures" table="Factures">
<id name="NumAvisIncident" type="int" column="NumAvisIncident">
<generator class="assigned"/>
</id>
<property name="NumFacture" type="int" not-null="true" />
<property name="ConsommationEstime" type="string" not-null="true" />
<property name="CodeTarif" type="int" not-null="true" />
<property name="PrixUnitaire" type="string" not-null="true" />
<property name="Timbre" type="string" not-null="true" />
<property name="GenrePaie" type="string" not-null="false" />
<property name="MontantPaye" type="string" not-null="false"/>
<property name="MontantConsommation" type="string" not-null="true" />
<property name="NetPayer" type="string" not-null="true" />
<property name="DontTva" type="string" not-null="true">
</property>
</class>
</hibernate-mapping>
3. La création d'un fichier de correspondance ou bien pour la configuration
Pour exécuter Hibernate, il faut lui fournir un certain nombre de propriétés concernant sa configuration pour qu'il puisse se connecter à la base de données.
Ces propriétés peuvent être fournies sous plusieurs formes :
* un fichier de configuration nommé hibernate.properties et stocké dans un répertoire inclus dans le classpath
* un fichier de configuration au format XML nommé hibernate.cfg.xml
* utiliser la méthode setProperties() de la classe Configuration
* définir des propriétés dans la JVM en utilisant l'option -Dpropriété=valeur
exemple d'un fichier de configuration que j'ai déja utilisé:ce fichier est nommé "hibernate.cfg.xml"
<?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="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/nomdemabasededonnée</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<property name="connection.pool_size">1</property>
<property name="current_session_context_class">thread</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="Factures.hbm.xml"/>
<mapping resource="Labo.hbm.xml"/>
<mapping resource="Tarifs.hbm.xml"/>
<mapping resource="Communes.hbm.xml"/>
<mapping resource="Users.hbm.xml"/>
</session-factory>
</hibernate-configuration>
4. L'utilisation d'Hibernate
Pour utiliser Hibernate dans le code, il est nécessaire de réaliser plusieurs opérations :
* création d'une instance de la classe
* création d'une instance de la classe SessionFactory
* création d'une instance de la classe Session qui va permettre d'utiliser les services d'Hibernate
Si les propriétés sont définies dans le fichier hibernate.properties, il faut tout d'abord créer une instance de la classe Configuration. Pour lui associer la ou les classes encapsulant les données, la classe propose deux méthodes :
* addFile() qui attend en paramètre le nom du fichier de mapping
* addClass() qui attend en paramètre un objet de type Class encapsulant la classe. Dans ce cas, la méthode va rechercher un fichier nommé nom_de_la_classe.hbm.xml dans le classpath (ce fichier doit se situe dans le même répertoire que le fichier .class de la classe correspondante)
Une instance de la classe Session est obtenu à partir d'une fabrique de type SessionFactory. Cet objet est obtenu à partir de l'instance du type Configuration en utilisant la méthode buildSessionFactory().
La méthode openSession() de la classe SessionFactory permet d'obtenir une instance de la classe Session.
Par défaut, la méthode openSession() qui va ouvrir une connexion vers la base de données en utilisant les informations fournies par les propriétés de configuration.
Exemple :
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.Configuration;
import java.util.Date;
public class TestHibernate1 {
public static void main(String args[]) throws Exception {
Configuration config = new Configuration();
config.addClass(Personnes.class);
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
...
Il est aussi possible de fournir en paramètre de la méthode openSession() une instance de la classe javax.sql.Connection qui encapsule la connexion à la base de données.
Pour une utilisation du fichier hibernate.cfg.xml, il faut créer une occurrence de la classe Configuration, appeler sa méthode configure() qui va lire le fichier XML et appeler la méthode buildSessionFactory() de l'objet renvoyer par la méthode configure().
Exemple :
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.Configuration;
import java.util.*;
public class TestHibernate1 {
public static void main(String args[]) throws Exception {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
...
Il est important de clôturer l'objet Session, une fois que celui est devenu inutile, en utilisant la méthode close().
5.Exemple d'utilisation de hibernate dans le code "La persistance d'une nouvelle occurence"
Pour créer une nouvelle occurrence dans la source de données, il suffit de créer une nouvelle instance de classe encapsulant les données, de valoriser ces propriétés et d'appeler la méthode save() de la session en lui passant en paramètre l'objet encapsulant les données.
La méthode save() n'a aucune action directe sur la base de données. Pour enregistrer les données dans la base, il faut réaliser un commit sur la connexion ou la transaction ou faire appel à la méthode flush() de la classe Session.
Exemple :
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.Configuration;
import java.util.Date;
public class TestHibernate1 {
public static void main(String args[]) throws Exception {
Configuration config = new Configuration();
config.addClass(Personnes.class);
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Personnes personne = new Personnes("nom3", "prenom3", new Date());
session.save(personne);
session.flush() ;
tx.commit();
} catch (Exception e) {
if (tx != null) {
tx.rollback();
}
throw e;
} finally {
session.close();
}
sessionFactory.close();
}
}
je souhaite que ça vous aide et bonne chance.