Débuter avec Hibernate sous Eclipse
Par
Minosis
(Homepage)
Les applications d'entreprises s'orientent de plus en plus vers des architectures n-tiers. La technologie J2EE et les frameworks qui se sont créés autour offrent beaucoup d'outils pour répondre aux besoins modernes. Nous allons nous intéresser dans cet article, sous la forme d'un tutorial, au framework de mapping objet-relationnel le plus populaire pour J2EE appelé Hibernate. Et après l'article : détente avec du sudoku. Introduction 1. Création de la base de données 2. Installation de Hibernate Synchronizer 3. Utilisation de Hibernate 3.1. Création et préparation du projet 3.2. Création des éléments de Hibernate 3.2.1. Création du fichier de configuration xml 3.2.2. Création du fichier de mapping xml 4. Test des classes 4.1. Classe HibernateUtil 4.2. Classe Test 4.2.1. Insertion 4.2.2. Mise à jour 4.2.3. Lecture Conclusion Introduction
Les applications d'entreprises s'orientent de plus en plus vers des architectures n-tiers. La technologie J2EE et les frameworks qui se sont créés autour offrent beaucoup d'outils pour répondre aux besoins modernes. Pour la couche présentation, on trouve, par exemple, le trés populaire Struts respectant le modèle MVC de séparation du code, de l'interface et des données. Pour ce type de couche, on trouve plus classiquement les JSP ou les trés récentes JSF qui permettraient de concurrencer directement le modèle initié par l'ASP.NET.
Nous allons, cependant, nous intéresser à une couche plus basse d'une architecture applicative, la couche d'accés aux données. Celle-ci permet d'interfacer le code métier avec une source de données. L'intérêt est de pouvoir changer de base de données en n'ayant besoin de ne modifier que la couche d'accés.
Il est possible d'écrire soit même les classes qui seront ensuite exposées au code métier mais c'est souvent fastidieux ou même maladroit à réaliser. Il vaut donc mieux utiliser un framework spécialisé dans cette tâche. De ce côté Dotnet a une faiblesse : OpenSpace, la technologie officielle de microsoft ne devrait sortir qu'en 2006. En attendant quelques solutions existent même s'ils ne disposent pas du même retour d'expérience que les outils J2EE. Pour la technologie de Sun, la spécification récente est JDO qui s'avère assez peu utilisée dans les fait. Le framework le plus populaire pour J2EE est sans contexte Hibernate.
Voici comment se présente trés globalement l'architecture d'Hibernate.
![]() Source : hibernate.org
Ce type de technologie peut être appelé framework de mapping objet-relationnel ou de persistance objet des données.
En effet, la couche applicative voit les données comme des classes dont le contenu reste en mémoire même après la fin d'exécution du programme. D'où persistance objet des données. De plus, le lien entre les classes exposées et la source physique des données (souvent une base de données relationnelle) est définie par un fichier xml. D'où mapping objet-relationnel.
Cet article va présenter comment utiliser Hibernate sous Eclipse grâce à un plug-in appelé Hibernate Synchroniser. La base de données choisie est SQL Server 2000.
1. Création de la base de données
La source de données choisie pour cet article est SQLServer 2000. Il est évidemment possible d'en choisir une autre comme Oracle, Mysql ou même un simple fichier XML pourvu que vous disposiez des drivers JDBC adaptés.
Nous supposons que SQLServer 2000 est installé et que vous disposez des droits nécessaires pour créer une nouvelle base et de nouveaux utilisateurs.
![]()
![]()
Votre base de données est maintenant prête. Vous pouvez, si vous le désirez, ajouter quelques enregistrements manuellement dans la table pour les futurs tests.
2. Installation de Hibernate Synchronizer
Si ces deux premiers points vous pose problème, consultez la page suivante : http://www.eclipsetotale.com/articles/installation.html
![]()
Si tout le processus s'est bien déroulé, Hibernate Synchronizer est installé.
3. Utilisation de Hibernate3.1. Création et préparation du projet
Avant de passer au coeur de l'utilisation d'Hibernate, nous devons créé et configurer un projet Eclipse. Cette partie est essentielle au bon fonctionnement de la suite.
![]()
![]()
Nous allons maintenant ajouter au classpath du projet les librairies :
![]()
Nous sommes prêt à passer aux choses sérieuses ;-)
3.2. Création des éléments de Hibernate3.2.1. Création du fichier de configuration xml
Le fichier que nous allons créer va permettre d'indiquer au moteur d'Hibernate les paramètres de connexion à la base de données.
![]()
![]()
Remarque 1 : si plus tard, hors du contexte de ce tutorial, vous deviez utiliser Hibernate dans un serveur d'application J2EE, vous devriez le choisir dans la liste "Application Server".
Remarque 2 : le nom "net.sourceforge.jtds.jdbc.Driver" doit être entré à la main (aprés avoir cliqué sur "Browse"). En effet, le moteur de recherche ne le trouvera pas sinon.
Remarque 3 : on suppose que l'instance SQLServer est sur la même machine (127.0.0.1). Si ce n'est pas le cas, entrez la bonne adresse ip.
Nous allons réaliser un exemple de test au prochain chapitre qui impose des modifications de hibernate.cfg.xml. En effet, ce fichier est destiné à être utilisé sur un serveur d'application. Nous allons le rendre utilisable dans un contexte plus simple :
Enregistrez le fichier, il est maintenant correct.
3.2.2. Création du fichier de mapping xml
Ce fichier est un élément majeur puisqu'il va permettre à Hibernate faire le pont entre les classes de persistance et la source de données.
![]()
Cliquez sur "Finish". Notre fichier de TContact.hbm est créé.
A ce moment, on peut supposer le fichier conforme. Il n'en est rien, le plugin Hibernate Synchronizer a généré un fichier non conforme à la DTD, hibernate-mapping-2.0.dtd.
Je vous propose donc de remplacer son contenu par celui-ci :
Tout n'était pas faux dans le précédent, mais celui-ci est plus conforme aux préconisations de l'aide officielle d'Hibernate et ne créera pas d'erreur lorsqu'il sera parsé.
Il est relativement simple à comprendre. <id> défini la clé pirmaire et <generator class="increment" />, indique le comportement de génération automatique de la clé primaire (ici incrément simple). Les <property> déclarent les autres champs. La balise <class> informe du nom de l'objet et du nom de la table correspondante.
Enregistrez le fichier. Le plugin génère alors automatiquement des classes. Si ce n'est pas le cas, faites sur le fichier TContact.hbm : "Bouton droit > Hibernate Synchroniser > Synchronize File".
Vous pouvez aller regarder les classes générées, surtout BaseTContact.java qui contient la traduction objet de la table "t_contact". C'est plutôt intéressant.
Voici l'allure du projet avec tous les packages déroulés :
![]()
Tous les fichiers nécessaires au mapping sont maintenant créés.
Le chapitre suivant propose de montrer comment les utiliser à partir de ce qui pourrait être la couche applicative.
4. Test des classes
Maintenant que des classes ont été générées grâce à Hibernate et Hibernate Synchronizer, nous pouvons les tester.
4.1. Classe HibernateUtil
Une classe Hibernate appellée SessionFactory permet à partir du fichier de configuration (hibernate.cfg.xml) d'être associé à la source de données. Elle fournit des objets Session pour manipuler les données. Cependant, en général, les serveurs d'application et les conteneurs de servlets, exécutent dans plusieurs threads le même code. En utilisation directe, SessionFactory serait donc instancié autant de fois qu'il y a de threads. Chaque instance se base pourtant sur le même fichier de configuration. Il est donc plus adapté de rendre une même instance de SessionFactory accessible par les threads. Nous allons, pour celà, écrire une classe trouvée dans l'aide en ligne d'Hibernate.org.
4.2. Classe Test
Nous allons, avec cette classe, tester la lecture, la modification et l'insertion de données dans "t_contact".
![]()
![]()
Si vous désirez démarrer de suite le programme, cliquez sur "Run" sinon vous pourrez le faire plus tard, cliquez sur "Close".
4.2.1. Insertion
On crée une nouvelle Session à partir du SessionFactory static donné par HibernateUtil.
Une transaction est démarrée pour pallier à d'éventuels problèmes lors de l'insertion.
Jean Dupont est inséré ensuite, grâce à la classe TContact. Puis la transaction est commitée avant la fermeture de la session.
4.2.2. Mise à jour
Aprés le démarrage de la transaction, la classe persistante TContact correspondant à l'id=1 est chargée par session.load().
Le premier enregistrement est donc chargé et modifié. Si vous avez déjà exécuté le code d'insertion, "Jean" sera remplacé par "Jacques".
La méthode de sélection de l'enregistrement n'est pas vraiment parfaite. Rassurez vous, l'objet session fournit beaucoup de possibilité de filtre. Nous en verrons une dans l'exemple de lecture.
4.2.3. Lecture
session.find() nous retourne une liste des enregistrements trouvés par la requête HQL. On lui demande ici de retourner tous les enregistrements trouvés dans un type List.
Il ne reste plus qu'à afficher les informations que l'on veut.
Les exemples ici sont trés simplistes mais permettent au moins d'avoir une vue globale du fonctionnement d'Hibernate. Le framework est évidemment beaucoup plus puissant.
Conclusion
Cet article vous a essentiellement montré comment démarrer avec Hibernate, comment ne pas rencontrer les premiers problèmes de compilation ou de parsing xml.
Cependant l'exemple se base sur une unique table de 4 champs et ne permet pas du tout de réellement connaître Hibernate. Le framework est trés puissant et finalement peu complexe grâce à des plugins comme Hibernate Synchroniser. Hibernate est capable de gérer finement les jointures entre les tables, la génération des clés primaires, la conversion de types. Ceci se fait simplement dans les fichiers de mapping xml. De même, Hibernate fournit un langage de requétage efficace, le HQL. Je vous invite à consulter la documentation officielle en français sur le site Hibernate.org. Elle est trés bien faite et vraiment fournie.
En bref, ce type d'outil optimise le temps de développement du programmeur et permet de réaliser des applications plus homogènes, plus facilement migrables aussi (pensez que pour changer de base de données, il suffit juste de toucher à hibernate.cfg.xml).
Téléchargez le projet Eclipse de ce tutorial. Pour l'utiliser, il vous faudra au moins réaliser les deux premiers chapitres.
Pour information, il existe un début de migration de Hibernate pour Dotnet, appelé nHibernate.
Merci à Vedaer pour avoir mis en page cet article.
|
Les sources présentées sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2004 Minosis. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.