30
Le mapping objet relationnel Introduction au mapping objet relationnel avec Nhibernate Cyril GRAUFFEL – IR3 – 2009/2010

Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Le mapping objet relationnel

Introduction au mapping objet relationnel avec Nhibernate

Cyril GRAUFFEL – IR3 – 2009/2010

Page 2: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Plan de présentation

1. Le modèle relationnel et le modèle objet

2. Le Mapping Objet Relationnel (ORM)

Cyril GRAUFFEL - IR3 - 2009/2010

2. Le Mapping Objet Relationnel (ORM)

3. Introduction à NHibernate

2

Page 3: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Le modèle relationnel et le modèle objet

� Les problèmes de correspondance entre le modèle objet et le modèle relationnel:

� Le modèle objet propose plus de fonctionnalités :� L’héritage, le polymorphisme

� Les relations entre deux entités sont différentes

� Les objets ne possèdent pas d’identifiant unique contrairement au modèle relationnel

Cyril GRAUFFEL - IR3 - 2009/20103

Page 4: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Le modèle relationnel et le modèle objet

� Pour accéder à la base de données :

� L’API JDBC pour Java;

� ADO.NET pour .Net;

� Inconvénients : � Nécessite l’écriture de nombreuses lignes de codes répétitives

� La liaison entre les objets et les tables est un travail de bas niveau

Cyril GRAUFFEL - IR3 - 2009/20104

Page 5: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

2. Le Mapping Objet Relationnel

� Plan :

a. Définition

b. Avantages / Inconvénients

c. Les critères pour choisir un outil

d. Les outils existants

Cyril GRAUFFEL - IR3 - 2009/20105

Page 6: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Le Mapping Objet Relationnel

� Définition :� Concept permettant de connecter un modèle objet à un modèle relationnel.

� Couche qui va interagir entre l’application et la base de données.

Cyril GRAUFFEL - IR3 - 2009/2010

données.

� Pourquoi utiliser ce concept?� Pas besoin de connaître l’ensemble des tables et des champs de la base de données

� Faire abstraction de toute la partie SQL d’une application.

6

Page 7: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Le Mapping Objet Relationnel

� Avantages / Inconvénients :

� Avantages : � Gain de temps au niveau du développement d’une application.

� Abstraction de toute la partie SQL.

� La portabilité de l’application d’un point de vue SGBD

Cyril GRAUFFEL - IR3 - 2009/2010

� La portabilité de l’application d’un point de vue SGBD

� Inconvénients : � L’optimisation des outils proposés

� La difficulté à maîtriser les outils.

7

Page 8: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Le Mapping Objet Relationnel

� Les critères pour choisir un outil de mapping objet relationnel :� La facilité du mapping des tables avec les classes, des champs avec les attributs.

� Les fonctionnalités de bases des modèles relationnel et objet.� Les fonctionnalités de bases des modèles relationnel et objet.

� Les performances et optimisations proposées : gestion du cache, chargement différé.

� Les fonctionnalités avancées : gestion des sessions, des transactions.

Cyril GRAUFFEL - IR3 - 2009/20108

Page 9: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Le Mapping Objet Relationnel

� Les différents outils existant :

� Python : SQLAlchemy

� Java : TopLink, Hibernate

Cyril GRAUFFEL - IR3 - 2009/2010

� C# : Nhibernate, DLinq

9

Page 10: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Introduction à NHibernate

a. Présentation de l’outil

b. La mise en place de Nhibernatea. Le fichier de configuration

b. Le mappingLe mapping

c. Gestion des sessions et des transactions

d. Exemple

c. Fonctions avancées� L’héritage, gestion de performances, langage de requêtes

Cyril GRAUFFEL - IR3 - 2009/201010

Page 11: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Présentation de l’outil

� ORM pour C#;

� Issue de l’ORM pour Java : Hibernate;

� Historique :

Cyril GRAUFFEL - IR3 - 2009/2010

� Historique : � 2005 – 2006 : projet de JBoss.

� Depuis 2006 : le support est assuré par la communauté NHibernate.

11

Page 12: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Présentation de l’outil

� Architecture :

APPLICATION

NHibernate

Cyril GRAUFFEL - IR3 - 2009/2010

Base de données

NHibernate

XML MappingPropriétés NHibernate

12

Page 13: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

La mise en place de NHibernate

� Comment ça marche?

� 1 fichier de configuration qui regroupe l’ensemble des informations de la base de données.

1 fichier xml par objet, représentant la correspondance entre

Cyril GRAUFFEL - IR3 - 2009/2010

� 1 fichier xml par objet, représentant la correspondance entre la table et l’objet.

13

Page 14: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

La mise en place de NHibernate

� Le fichier de configuration regroupe l’ensemble des informations de la base de données :� Le type de la base de données;

� Le type de langage SQL à générer pour dialoguer avec la base de données;de données;

� La chaine de connexion à la base de données;

Cyril GRAUFFEL - IR3 - 2009/201014

Page 15: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

La mise en place de NHibernate

� Exemple :

<?xml version="1.0" encoding="utf-8" ?><configuration><configSections><section name="hibernate-configuration"type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />

</configSections>

Cyril GRAUFFEL - IR3 - 2009/2010

</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>…

15

Page 16: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

La mise en place de NHibernate

…<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>

Cyril GRAUFFEL - IR3 - 2009/2010

</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>

16

Page 17: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

La mise en place de NHibernate

� Le mapping fait l’association entre un objet et une table de la base de données.

� Plusieurs étapes :

� Création de la classe de l’objet;� [Objet].cs

� Création du fichier de mapping;� [Objet].hbm.xml;

Cyril GRAUFFEL - IR3 - 2009/201017

Page 18: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

La mise en place de NHibernate

� Création de la classe : Parking.cspublic class Parking

{private int id;private string name;

//Constrcuteur….

Cyril GRAUFFEL - IR3 - 2009/2010

public virtual int Id{

get { return id; }set { id = value; }

}

public virtual string Name{

get { return name; }set { name = value; }

}}

18

Page 19: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

La mise en place de NHibernate

� Création du fichier de mapping : Parking.hbm.xml<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"><class name="Test.Parking, Test" table="parking“ ><id name="Id" column="id" type="Int32"><generator class="native" />

</id><property name="Name" column="parkingName" type="String"/>

Cyril GRAUFFEL - IR3 - 2009/2010

<property name="Name" column="parkingName" type="String"/></class>

</hibernate-mapping>

19

Page 20: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

La mise en place de NHibernate

� Gestion des sessions:

� On récupère la configuration de la base de données� Configuration;

� On récupère la factory des sessions

Cyril GRAUFFEL - IR3 - 2009/2010

� On récupère la factory des sessions� ISessionFactory;

� On récupère une session de la factory� ISession;

20

Page 21: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

La mise en place de NHibernate

� L’objet NHibernate.Cfg.Configuration

� Informations de connection à la base de données et les propriétés de Nhibernate (App.config)

Configuration conf = new Configuration() .Configure("App.config");

Cyril GRAUFFEL - IR3 - 2009/2010

� Informations de mapping : les différents fichiers de mapping

Configuration conf = conf.AddAssembly("[objet].hbm.xml");

Configuration conf = new Configuration() .Configure("App.config");

21

Page 22: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

La mise en place de NHibernate

� Comment obtenir une session ?� Récupérer une instance de ISessionFactory de la configuration

� ISessionFactory factory = conf. BuildSessionFactory();

� Récupérer une instance de ISession de la Factory� ISession session = factory.OpenSession();

Cyril GRAUFFEL - IR3 - 2009/2010

� La session : � 3 Actions :

� Save

� Update

� Delete

� Exemple : session.Save(objet);

22

Page 23: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

La mise en place de NHibernate

� Que permet une transaction?� Valider une action de la session : Commit();

� Annuler une action de la session : Rollback();

try{ISession session = …

Cyril GRAUFFEL - IR3 - 2009/2010

ISession session = …ITransaction tx = session.BeginTransaction();…tx.Commit();session.Close();

} catch(Exception ex){tx.Rollback();

}

23

Page 24: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Exemple avec NHibernate

� Exemple simple de l’utilisation de NHibernate :

� Création d’un objet Parking et sauvegarde de ce dernier en base de données;

Même exemple avec une autre base de données;� Même exemple avec une autre base de données;

Cyril GRAUFFEL - IR3 - 2009/201024

Page 25: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Fonctions avancées

� Pour l’héritage, nous avons 3 solutions :� Table per class hierarchy : balise <subclass>

� Une classe par type d’entité mais une seule et même table dans la base de données.

� Un champ discriminant dans la table.

� Table per subclass : balise <joined-subclass> � Autant de tables que d’entités.

� Table per concrete class : mapping simple� Autant de table que d’entités concrètes, mais rarement utilisé due à sa limitation.

Cyril GRAUFFEL - IR3 - 2009/201025

Page 26: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Fonctions avancées

� Gestion des performances : � Gestion des collections d’objets utilise le lazy-loading.

� Attribut lazy avec la valeur true ou false;

� Ne charge uniquement les objets lors de leur accès.

� Qu’est ce que l’on y gagne ?� Temps de chargement des données d’une application.

� Économie de ressource mémoire et de charge serveur coté SGBD.

Cyril GRAUFFEL - IR3 - 2009/201026

Page 27: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Fonctions avancées

� Implémente son propre langage d’interrogation, 2 solutions : � Construction de critères et de filtres

� Grâce aux objets ICriteria

� Utilisation d’un véritable langage d’interrogation objet :� Utilisation d’un véritable langage d’interrogation objet :� Le HQL (Hibernate Query Language)

� Utilisation de l’objet IQuery

� Langage de requête totalement orienté objet.

Cyril GRAUFFEL - IR3 - 2009/201027

Page 28: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Conclusion

� La correspondance entre le modèle objet et le modèle relationnel n’est pas si facile que l’on peut croire

� Les outils ORM:� Facilite cette correspondance.

Cyril GRAUFFEL - IR3 - 2009/2010

� Gain de temps au niveau du développement

� Portabilité de l’application.

28

Page 29: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Bibliographie

� Nombreux sites parmis lesquels : � Livre blanc sur les ORM : http://www.dotnetguru.org/articles/Persistance/livreblanc/ormapping.htm

� Site du framework Hibernate et NHibernate : http://www.hibernate.org/http://www.hibernate.org/

� Blog : � http://www.technologies-dotnet.be

� http://blog.olivier-duval.info/

� http://fr.wikipedia.org/wiki/Mapping_objet-relationnel

� http://www.developpez.com

Cyril GRAUFFEL - IR3 - 2009/201029

Page 30: Introduction au mappingobjet relationnel avec Nhibernate Cyril …igm.univ-mlv.fr/~dr/XPOSE2009/IntroductionNHibernate/doc/... · 2010-03-31 · Java : TopLink, Hibernate Cyril GRAUFFEL

Question

Cyril GRAUFFEL - IR3 - 2009/201030