Intégration d’Hibernate avec Spring


L’objectif de cet article est d’exposer les différentes méthodes permettant d’intégrer les frameworks Hibernate et Spring dans une même application.

Intégartion Hibarnate et Spring


Il existe deux méthodes pour intégrer les deux frameworks spring et Hibernate dans une même application :
  • La première méthode consiste à utiliser le module spring ORM.
  • La deuxième c’est d’utiliser le module spring DAO.    
Spring offre, à travers ses deux modules, spring ORM et spring DAO,  une solution pour l’intégration de plusieurs frameworks de mapping (Hibernate, iBatis, JDO, TopLink …).

Le principe des deux modules consiste à faire une abstraction par rapport au framework de mapping utilisé pour accéder à la base de données en offrant un système de management des transactions et d’accès aux données et une hiérarchie d’exceptions génériques.
Dans cet article, nous allons voir comment configurer spring et Hibernate en utilisant les deux méthodes.

Pour les deux méthodes,  il est obligatoire de déclarer un dataSource qui définit la connexion à la base. L’exemple ci-dessous permet de configurer la connexion à une base MySQL.

On peut utiliser un fichier « propreties » pour configurer et définir les paramètres de la dataSource.

config

Une fois le dataSource est configurée, il est nécessaire de définir une sessionFactory. L’exemple ci-dessous montre comment définir une sessionFactory pour Hibernate2.

config

Pour utiliser spring et Hibernate, il est obligatoire que le sessionFactory soit une instance de la classe LocalSessionFactoryBean de Spring. Le sessionFactory doit faire référence à la dataSource définit précédemment. Ensuite, il faut préciser les fichiers de mapping d’Hibenate. Enfin, il faut définir les propriétés spécifiques à Hibernate telle que hibernate.dialect qui est spécifique à chaque base et qui permet d’optimiser l’utilisation des spécificités de chaque base, par exemple pour la génération du SQL.

Utiliser Spring DAO

Pour utiliser cette méthode, il faut que les classes DAO héritent de la classe HibernateDaoSupport de Spring. Les beans des DAOs doivent avoir la propriété « sessionFactory » comme le montre l’exemple ci-dessous.

daoconf

Utiliser Spring ORM

Cette méthode n’impose aucune contrainte, il suffit juste de définir un HibernateTemplate comme le montre l’exemple ci-dessous :
orm context

HibernatTemplate offre plusieurs méthodes pour accéder aux méthodes offertes par le framework Hibernate. Si vous voulez utiliser des méthodes non supportés par HibernateTemplate vous devez utiliser callback, comme le montre l'exemple ci dessous, et ceci pour accéder aux méthodes de la session Hibernate.

orm dao

Application

Dans cet article, nous allons partir de  l’application  de l’article précédent « intégration spring  struts » pour ajouter le framework Hibernate.
La base de données utilisée est MySQL. La base springdb contient une table user qui contient les champs id, login et password.
L'objectif de l’application est de montrer comment  mettre en place Hibernate et spring sans entrer dans les détails des méthodes des modules spring DAO et spring ORM.

Pour utiliser Spring ORM il faut:
Modifier le fichier de configuration applicationContext.xml  en suivant ce qui est décrit précédement.
Ajouter le fichier de mapping User.hbm.xml.


user hbm

Ajouter les interfaces DAO et UserDAO.

Ajouter la classe UserDAOImpl, l’implémentation de la classe UserDAO.

user dao

Modifier la classe UserManagerImpl pour utiliser la classe UserDAO.

manager

Pour télécharger le code de cette application cliquer ici application

Pour utiliser spring ORM, il suffit  de modifier les fichiers applicationContext.xml et UserDAOImpl comme c’est indiqué dans les exemples du paragraphe « Utiliser Spring ORM ».

Conclusion

Dans cet article, nous avons vu comment intégrer spring et Hibernate dans une même application en utilisant spring DAO et spring ORM. Il reste maintenant à configurer l’application pour gérer les transactions, ceci sera l’objectif du prochain article.

Références
http://static.springframework.org/spring/docs/2.0.x/reference/orm.html
Spring in action Craig Walls & Ryan Breidenbach