vers l'accueil formulaire de contact

Tutoriel Hibernate N°2 : votre première application hibernate

Votre formation HIBERNATE avec Objis, spécialiste formation java depuis 2005 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

- Installation Hibernate

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 ?

PNG - 102.4 ko

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 :

Zip - 4.4 Mo
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.

Cette classe n’apparaît dans aucune des 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 : 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.

texte - 5.2 ko
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 :

PNG - 1.9 ko
tutoriel2_hibernate_objis_eclipse_16

- Relancez l’application. Le formatage du sql généré a changé. C’est plus lisible.

PNG - 6.5 ko
tutoriel2_hibernate_objis_eclipse_17

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 :

PNG - 2 ko
tutoriel2_hibernate_objis_eclipse_14

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()

PNG - 18.6 ko
tutoriel2_hibernate_objis_eclipse_15

Ci-dessous les résultats obtenus :

PNG - 37.2 ko
tutoriel2_hibernate_objis_eclipse_18

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).

PNG - 38.3 ko
tutoriel2_hibernate_objis_eclipse_21

Création classe GestionnaireFormation

Ci-dessous un exemple d’implémentation de la méthode d’enregistrement en base de données (creerFormation()).

PNG - 22.6 ko
tutoriel2_hibernate_objis_eclipse_19bis

- Expliquez le code
- Identifiez les lacunes de cette architecture.
- 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 :

PNG - 14.5 ko
tutoriel2_hibernate_objis_eclipse_19ter

Corrigé

Zip - 4.7 Mo
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)

PNG - 19.9 ko
tutoriel2_hibernate_objis_eclipse_20

- 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()

PNG - 22.8 ko
tutoriel2_hibernate_objis_eclipse_21

- Lancez le test Juint.

- Expliquez

corrigé

Zip - 4.8 Mo
corrige_tutoriel2_test_couche_service_demohibernate

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.

Formation HIBERNATE

Le chemin le plus court pour avoir les réflexes et la méthodologie du bon développeur Hibernate :

Votre formation HIBERNATE avec Objis, spécialiste formation java depuis 2005

Pour aller plus loin : le réseau Objis

Si vous appréciez notre sens du partage, devenez gratuitement membre ’classic’ du Club Objis :
- Votez pour les prochains tutoriaux à publier
- Préparez vos entretiens techniques
- Valorisez votre profil / expertise
- Identifiez des opportunités d’emploi
- Recevez la newsletter objis.com