ORM .Net : Spot sur Nhibernate
Dans la perspective de performance, de facilité et de gain de temps de développement des applications, les ORM font de plus en plus preuve de bon usage. Dans cet article j’ai choisi de vous parler de l’ORM NHibernate issu de l’outil Hibernante destiné pour la plateforme Java. Pour cette présentation, je vais répondre aux questions suivantes : Quel est le principe de NHibernate ? Quels sont les avantages et les inconvénients de ce framework ? Comment peut-on l’implémenter et l’utiliser dans nos applications ?
- Principe NHibernate
Nhibernate comme tous les ORMs établi une correspondance entre le modèle objet et le modèle relationnel représenté par les bases de données, en faisant abstraction. - Avantages et inconvénients
- Implémentation et illustations
- Les propriétés nhibernate : un fichier de configuration qui regroupe l’ensemble des informations de la base de données
<configuration> <configSections> <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" /> </configSections> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory> <property name="connection.provider"> NHibernate.Connection.DriverConnectionProvider </property> <property name="connection.driver_class"> NHibernate.Driver.MySqlDataDriver </property> <property name="connection.connection_string"> Database=nhibernate;Data Source=127.0.0.1;User Id=root;Password= </property> <property name="dialect"> NHibernate.Dialect.MySQLDialect </property> <property name="proxyfactory.factory_class"> NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle </property> <property name="show_sql">true</property> </session-factory> </hibernate-configuration> </configuration>
- Le mapping XML : un fichier xml par objet, représentant la correspondance entre la table et l’objet.
- La session et la transaction NHibernate
Ce schéma illustre le rôle que joue NHibernate dans l’architecture d’une application. Il permet ainsi à l’application (couche Data Access Object) d’échanger avec le SGBD sans émettre d’ordres SQL. NHibernate propose un langage de requêtes HQL (Hibernate Query language) qui interroge les objets gérés par NHibernate. Ces sont ces derniers qui émettent les ordres SQL.
Afin d’établir le dialogue entre les deux couches, il est commode de configurer 2 éléments de base du framework que je vais détailler dans la suite de cet article.
Comme je l’ai expliqué précédemment, NHibernate permet de mapper le modèle relationnel au modèle objet, ainsi pour interroger la Base de données on pourra utiliser les objets en faisant appel au langage orienté objet HQL. Nhibernate propose ainsi une abstraction de la partie SQL. Par ailleurs, ce concept peut présenter des inconvénients dont je cite l’optimisation et le coût des requêtes, parfois il est difficile de décider de la performance de ces dernières. La difficulté que peuvent trouver certains développeurs à maîtriser le framework. En effet, des fois l’accès directe à la base de données s’avère plus facile et plus efficace(en fonction des applications).
Dans cette partie je vais vous présenter les étapes d’utilisation de NHibernate en s’appuyant sur des snippets de code.Afin de mettre en place NHibernate certaines étapes doivent être respectées. En effet, l’utilisation du framework passe du téléchargement des DLL adéquates à la configuration et l’implémentation du code.
Une fois le téléchargement et l’ajout des DLL sont effectués, la configuration des fichiers dont j’ai parlé au début de cet article s’avère nécessaire.
Prenons l’exemple de la classe
public class Person
{
private int id;
private string name;
//Constrcuteur
….
public virtual int Id
{
get { return id; }
set { id = value; }
}
public virtual string Name
{
get { return name; }
set { name = value; }
}
}
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> <class name="Test.Person,Person" table="person“ > <id name="Id" column="id" type="Int32"> <generator class="native" /> </id> <property name="Name" column="Name" type="String"/> </class> </hibernate-mapping>
Après la création de ces 2 fichiers, la session NHibernate pourrait utiliser ces informations pour permettre à l’application d’interagir avec la base de données.
public class NHibernateSession
{
private static ISessionFactory _sessionFactory;
private static ISession _session;
public static ISession Session
{
get
{
if (_session == null)
{
_sessionFactory = new Configuration().Configure().BuildSessionFactory();
_session = _sessionFactory.OpenSession();
}
return _session;
}
}
}
La transaction va nous permettre ainsi d’annuler ou de valider une action de la session
try{
ITransaction tx = NHibernateSession.Session.BeginTransaction() ;
Person p=new Person("TestPerson") ;
NHibernateSession.Session.Save(p);
tx.Commit();
session.Close();
} catch(Exception ex){
tx.Rollback();
}
Ainsi la session NHibernate prend en charge toutes les opérations possibles sur les bases de données.
Dans cet article, je vous ai présenté les bases de NHibernate, pour de plus amples informations sur ce framework, rendez-vous sur les sites :
http://blogs.hibernatingrhinos.com/Install/InstallationComplete.aspx
http://community.jboss.org/wiki/NHibernateforNET
- MVVM : Vers des applications plus performantes et plus maintenables MVVM (Model-View-ViewModel) est l’un des nouveaux design patterns orientés plateformes .Net de développement modernes (WPF et Silverlight). Dans cet article,...
- SharePoint : développement et performances Nous allons voir comment l’on peut préserver voire améliorer les performances de SharePoint grâce à quelques bonnes pratiques de code....





