Mettez en œuvre Hibernate. Créez votre première classe persistante (Formation.java) et son fichier de mapping (Formation.hbm.xml). Configurez hibernate à travers le fichier hibernate.cfg.xml. Utilisez les objets SessionFactory , Session et Transaction afin de créer un enregistrement en base de donnée à partir d’un objet Formation instancié. Découvrez la classe HibernateUtil, fournie par Hibernate pour vos développements Hibernate. Enfin, créez et testez une couche ‘service’ chargée de réaliser des opérations métier de création et récupération d’objets
Ce tutoriel est extrait de séances pratiques de la formation HIBERNATE dispensée par Objis.
Prérequis, outils et versions
Liens utiles
+ de 100 tutoriaux java/jee Objis
Tutoriaux HIBERNATE Objis
Objis, spécialiste formation java depuis 2005
Site hibernate (javadoc , FAQ)
Objectifs
Voir hibernate core en action dans une application java simple
Comprendre les étapes de création d’un projet hibernate
Comprendre comment rendre une classe Java persistante par hibernate.
Comprendre les classes & interfaces SessionFactory, Session, Transaction
Comprendre la classe HibernateUtil fournie par Hibernate
Comprendre le fichier de configuration d’hibernate : hibernate.cfg.xml
Créer un fichier de mapping : Formation.hbm.xml
Programme
Partie 1 : Création projet hibernate
Partie 2 : Préparation hibernate (fichier config, librairies)
Partie 3 : Préparation Base de données HSQL
Partie 4 : Hibernate en action
Partie 5 : Logs générés
Partie 6 : Vérification enregistrement DB
Partie 7 : Formatage des logs
Partie 8 : Statistiques
Partie 9 : création d’une couche service : GestionnaireFormation
Partie 10 : test de la couche service
Durée
30 min.
Qui sommes-nous ?
Partie 1 : Création projet hibernate
Méthodologie
Domaine métier
Fichiers de mapping
Configuration hibernate
Démarrer la base
Lancer le programme
Vérification base de données
Mise en oeuvre
Dans cette partie vous allez mettre en œuvre Hibernate dans à travers un projet Java Eclipse.
projet Eclipse final
Voici l’arborescence vers laquelle nous allons…
Le projet Eclipse est le suivant :
Projet demonstration Hibernate
Classe persistante
Analysez le code de la classe Formation.java
Fichier de mapping
Analysez le code du fichier de mapping Formation.hbm.xml
Partie 2 : Configuration Hibernate
fichier de configuration
Analysez le code du fichier de configuration hibernate.cfg.xml
les librairies
Les jars nécessaires sont :
— Le fichier hibernate3.jar
— les jars ‘obligatoires’ d’hibernate présents dans lib/required
— un jar complémentaire à la façade slf4j.jar (Simple Logging façade for Java) , contenant l’implémentation des logs. Ici slf4j-simple.jar (récupéré de la version 1.5.8 de SFLJ)
— le jar contenant le driver base de données (configuré dans hibernate.cfg.xml). Ici hsqldb.jar (récupéré de la dernière version de Hypersonic database HSQLDB )
Classe principale et mise en œuvre persistance
Analysez les 6 étapes de la mise en œuvre de la sauvegarde en base d’une objet Formation Hibernate.
Analysez le code de la classe HibernateUtil suivante.
Où cette classe apparaît-elle dans les 6 étapes précédentes? Précisez son rôle. En quoi est-elle utile?
Partie 3 : Préparation Base de données
Dans un invite de commande msdos, démarrez la base de données HSQLDB à partir d’un répertoire dans lequel se trouve le jar hsqldb.jar (la location de ce répertoire peut se récupérer en faisant dans Eclipse clique-droit+Properties sur le dossier lib) :
java -cp hsqldb.jar org.hsqldb.Server
L’écran suivant apparaît. Mettez cette fenêtre de coté.
Partie 4 : Hibernate en action
Exécutez la classe principale de l’aplication DemoHibernate (Click droit puis Run->run as Java Application).
Que se passe t’il ?
Partie 6 : Logs
Ci-dessous les derniers logs qui apparaissent dans la console suite au lancement de l’application.
Remarquez que la trace d’insertion en base de données apparaît ici APRES la trace de log, alors que dans le code de DemoHibernate, l’instruction d’insertion en base (session.save()) apparaît AVANT la trace de log.
Expliquez pourquoi.
Logs application DemoHibernate
Expliquez les 2 requêtes SQL générées par hibernate.
Montrez qu’une modification du paramétrage de la génération de la clé primaire (remplacer ‘increment’ par ‘native’).
Partie 6 : Vérification enregistrement DB
Dans une nouvel invite de commande, lancez l’interface SWING permettant d’accéder aux données en base :
java -cp hsqldb.jar org.hsqldb.util.DatabaseManager
Sélectionnez le type Server Engine.
L’écran suivant apparaît.
Cliquez sur OK.
Observez le contenu de labase Formations.
Effectuez une requête pour connaître le contenu de la table formations.
L’enregistrement a bien été créé. Merci Hibernate.
Partie 7 : Formatage des logs
Ajoutez la ligne de paraétrage suivante dans le fichier de configuration d’hibernate :
Relancez l’application. Le formatage du sql généré a changé. C’est plus lisible.
Partie 8 : Statistiques
Hibernate vous permet d’avoir quelques informations et métriques relatifs aux Entités, collections manipulés ainsi que session et transactions ouvertes et fermées, cela à travers des objets du package org.hibernate.stats.
Etape 1 : permettre les statistiques
Autorisez la production de statistiques dans le fichier de configuration d’hibernate :
Etape 2 : Ajout code
Ajoutez le code nécessaire à la visualisation de statistiques :
1) Déclaration et instanciation de Statistics (ou de dérivés : CollectionStatistics , EntityStatistics,…)
2) Appel de la méthode logSummary()
Ci-dessous les résultats obtenus :
A partir des résultats ci-dessus :
Montrez que la connexion à la base de données a été ouverte une fois et fermée une fois. A quelles lignes de code cela correspond ?
Montrer qu’il y a eu une transaction ouverte et fermée.
D’où viennent les ‘Statement prepared’ ? Pourquoi y en a t’il 2 ?
Mettez en commentaires (//) la ligne de code associée à la fermeture de la session hibernate dans le code (ligne 33 : session.close()). Relancez l’application. Quel impact sur l’insertion des données en base de données?
Mettez en commentaires la validation de la transaction hibernate (ligne 30 : tx.commit ) dans le code. Quel impact sur l’insertion des données?
Qu’est ce qu’un ‘flush’ ?
A VOUS DE JOUER : A partir de la javadoc Hibernate, modifiez le code de l’application afin de n’obtenir que les ‘statistiques relatives aux entités’.
Dans la partie suivante, vous allez ‘alléger’ le code du client DemoHibernate et créant une ‘couche’ service.
Partie 9 : Création d’une couche service
Créez un package com.objis.demohibernate.service
Dans ce package, créez une classe GestionnaireFormation qui sera en charge de :
— la persistance d’une formation : méthode creerFormation(Formation formation) qui retournera la clé primaire de l’enregistrement créé.
— la recherche d’une formation par thème : méthode chercherFormationparTheme(String theme).
Création classe GestionnaireFormation
Ci-dessous un exemple d’implémentation de la méthode d’enregistrement en base de données (creerFormation()).
Expliquez le code
Identifiez les lacunes de cette architecture (si l’on veut passer d’Hibernate à TopLink par exemple).
Montrez comment l’utilisation d’interfaces peut apporter plus de modularité.
Modification du client
La classe principale de l’application (le ‘client’) ne contient plus de référence à hibernate et fait appel au service Gestionnaire :
Corrigé
corrige_tutoriel2_objis_hibernate_demohibernate_couche_service
Optimisations
REMARQUE : Le tutoriel hibernate N°11 « Couche Service Hibernate » proposera de mettre en œuvre une architecture applicative de meilleure qualité (plus modulaire et évolutive) avec en particulier :
— l’utilisation du design pattern DAO (classe supplémentaire Formation Dao)
— l’utilisation du design pattern Business Delegate
En particulier, la couche service, débarrassée de code technique , utilisera le savoir-faire d’autres classes spécialisées comme couche DAO ou comparateur de classes.
Partie 10 : test couche service
Créez un package com.objis.demohibernate.test
Ajoutez le jar de Junit dans le répertoire lib de l’application
Ajoutez le jar dans les librairies eclipse (build path)
Créez une classe de test JUnit GestionnaireFormationTest afin de tester la couche de service, en particulier la méthode creeFormation().
En particuliers, codez la méthode testCreerFormation()
Lancez le test Juint.
Expliquez
corrigé:
Hib-TP-2-premiere-appli-Correction
Conclusion
Dans ce tutoriel, vous avez vu hibernate à l’œuvre : après avoir instancié un objet, vous avez rendu cet objet persistant en base de données, dans un enregistrement.
Vous avez formaté les requêtes générées par Hibernate pour une meilleure analyse. Vous avez enfin configuré et utilisé une partie de l’API de Statistiques d’hibernate.
Le tutoriel suivant Analyse des logs Hibernate vous permettra de mieux comprendre les logs et maîtriser via le framework SL4J la qualité et quantité de logs produites, ainsi que dynamiquement le framework de log utilisé au déploiement.