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

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

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 ?

presentation-objis-conseil-formation-java-soa2.png

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…

tutoriel2_hibernate_objis_eclipse_2.png

Le projet Eclipse est le suivant :

Projet demonstration Hibernate

Classe persistante

 Analysez le code de la classe Formation.java

tutoriel2_hibernate_objis_eclipse_3.png

Fichier de mapping

 Analysez le code du fichier de mapping Formation.hbm.xml

tutoriel2_hibernate_objis_eclipse_4.png

Partie 2 : Configuration Hibernate

fichier de configuration

 Analysez le code du fichier de configuration hibernate.cfg.xml

tutoriel2_hibernate_objis_eclipse_6.png

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.

tutoriel2_hibernate_objis_eclipse_7.png

 Analysez le code de la classe HibernateUtil suivante.

tutoriel2_hibernate_objis_eclipse_5.png

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

tutoriel2_hibernate_objis_eclipse_8.png

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.

tutoriel2_hibernate_objis_eclipse_13.png

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.

tutoriel2_hibernate_objis_eclipse_9.png

 Cliquez sur OK.

tutoriel2_hibernate_objis_eclipse_10.png

 Observez le contenu de labase Formations.

tutoriel2_hibernate_objis_eclipse_11.png

 Effectuez une requête pour connaître le contenu de la table formations.

tutoriel2_hibernate_objis_eclipse_12.png

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 :

tutoriel2_hibernate_objis_eclipse_16

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

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 :

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

tutoriel2_hibernate_objis_eclipse_15

Ci-dessous les résultats obtenus :

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

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

tutoriel2_hibernate_objis_eclipse_19bis

 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 :

tutoriel2_hibernate_objis_eclipse_19ter

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)

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

tutoriel2_hibernate_objis_eclipse_21

 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.

2018-01-27T16:40:03+01:00

Contactez nous

241 rue DUGUESCLIN, 69003 Lyon

Web : Objis : spécialiste formation Java