64
Sérialisation, Persistance et Mapping Objet Relationnel

Sérialisation, Persistance Et Mapping Objet Relationnel

  • Upload
    allili

  • View
    1.073

  • Download
    1

Embed Size (px)

DESCRIPTION

Sérialisation, Persistance Et Mapping Objet Relationnel

Citation preview

Page 1: Sérialisation, Persistance Et Mapping Objet Relationnel

Sérialisation, Persistance et Mapping Objet Relationnel

Page 2: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 2

Sérialisation Mapping O/R Introduction Exemples d’utilisation Mécanisme [Serializable] et

[NonSerialized] Sérialisation binaire Sérialisation SOAP Contrôle de la

sérialisation binaire Sérialisation XML Sérialisation

Personnalisée

Introduction Nhibernate

Présentation Architecture Mécanisme Configuration Classe Persistante Déclaration du

Mapping Récupération des

données Opérations M.A.J

10/04/23

Page 3: Sérialisation, Persistance Et Mapping Objet Relationnel

Sérialisation et Persistance

Page 4: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 4

La sérialisation est le processus de sauvegarde de l’état d’un objet à destination d’une zone de stockage

La désérialisation est le processus inverse, reconstituer l’objet depuis un flux de données.

ObjetSérialisation en flux de données

Mémoire

Fichiers

Base de

données

10/04/23

Page 5: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 5

Avantages : Faciliter le partage d’objets entre applications. Faciliter le transport d’un objet par réseau. Cloner les objects. Inconvénients : Le principal inconvénient est lié aux ressources (CPU,

Périphérique IO). La sérialisation XML est non sécurisée. La sérialisation XML est lente. Sérialisation # Persistance :Surtout, il ne faut pas confondre ces deux termes. Sérialisation : Conversion d’un objet en flux de données. Pas

de notion de stockage. Persistance : fait référence au stockage permanant.

10/04/23

Page 6: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 6

Quelques exemples d’utilisation :

Les applications Windows Clientes :• La sérialisation peut être utilisé pour sauvegarder l’état de

l’application.• Copier / Coller des objets dans le presse papier.

Le Remoting .Net• Partager des objets à travers le réseau

Le Web Services• Une classe est particulièrement adaptée au mécanisme de

sérialisation. (Format XML)

10/04/23

Page 7: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 7

Afin de sérialiser un objet en .net, nous avons besoin d’un flux de données et d’un formateur.

Le flux de données va contenir l’objet sérialisable. Le formateur sérialise l’objet dans le flux de données selon un

format déterminé. Les formateurs disposent de deux principales méthodes :

void Serialize( Stream serializationStream, Object graph){

...}

void Serialize( Stream serializationStream, Object graph){

...}object Deserialize(Stream serializationStream){

...}

object Deserialize(Stream serializationStream){

...}

10/04/23

Page 8: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 8

Il ya trois formats fournis par le Framework. NET pour les objets qui peuvent être sérialisé.

System.Runtime.Serialization.Form

atters

Sérialisation personnalisée : Et oui on peut le faire

Les formateurs

du Framework .

NET

Les formateurs

du Framework .

NET

Formateur Binaire

(Sérialisation Binaire)

Formateur Binaire

(Sérialisation Binaire)

Formateur SOAP

(Sérialisation SOAP)

Formateur SOAP

(Sérialisation SOAP)

Formateur XML(Sérialisation

XML)

Formateur XML(Sérialisation

XML)

System.Runtime.Serialization.Form

atters

System.Xml.Serialization.XmlSeriali

zer

10/04/23

Page 9: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 9

Afin qu’une classe peux être sérialiser on doit placer l’attribut [Serilizable] en tête de la classe.

Cet Attribut concerne seulement une Sérialisation binaire. Si une classe est précédée par [Serializable], alors tous les

attributs sont sérialisés, sauf qui sont précédés par [NonSerialized].

[NonSerialized] indique qu’un attribut ne sera pas sérialiser. La sérialisation d’une classe non précédée par [Serializable]

déclenche une exception de type SerializationException Exemple :[Serializable]

public class Employee {    public int empCode;    public string empName; }

[Serializable] public class Employee {    public int empCode;    public string empName; }

10/04/23

Page 10: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 10

BinaryFormatter : Il y a émission d’octets en flux continu à partir d’un ou

plusieurs objets. La sérialisation binaire fournit un moyen de persister un objet

de telle manière que l'objet peut être reconstruit automatiquement.

Elle est destiné à sauver l'état d'un objet qui sera partagé par un autre .NET programme ou par le même programme à un moment ultérieur.

Elle stocke tout l’état de l'objet, y compris le type d'information, d’une façon fidèle à l’origine.

Seules les applications qui ont accès à l’assembly qui contient le type de définition de l’objet peuvent le désérialiser.

Exemple :

10/04/23

Page 11: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 11

Sérialisation :

public void Serialiser(string fichier, Employee emp) {   FileStream fstr=null; //Using System.IO;   try   {     fstr = new FileStream(fichier, FileMode.Create);     BinaryFormatter biformatter = new BinaryFormatter();     binformatter.Serialize(fstr, emp);   }   finally   {     fstr.Close();   } }

public void Serialiser(string fichier, Employee emp) {   FileStream fstr=null; //Using System.IO;   try   {     fstr = new FileStream(fichier, FileMode.Create);     BinaryFormatter biformatter = new BinaryFormatter();     binformatter.Serialize(fstr, emp);   }   finally   {     fstr.Close();   } }

10/04/23

Page 12: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 12

Désérialisation :

public static employee Deserialiser(string fichier) {   FileStream fstr;     try   {     fstr = new FileStream(fichier, FileMode.Open);     BinaryFormatter binformatter = new BinaryFormatter();     return ((Employee)binformatter.Deserialize(fstr));   }   finally   {     fstr.Close();   } }

public static employee Deserialiser(string fichier) {   FileStream fstr;     try   {     fstr = new FileStream(fichier, FileMode.Open);     BinaryFormatter binformatter = new BinaryFormatter();     return ((Employee)binformatter.Deserialize(fstr));   }   finally   {     fstr.Close();   } }

10/04/23

Page 13: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 13

Démos : Serialisation_Binaire

10/04/23

Page 14: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 14

SOAP est le protocole idéal pour la communication entre les applications qui utilise des architectures hétérogènes.(Web Services)

SoapFormatter : Emission d’un flux XML en utilisant les spécifications de SOAP. La sérialisation binaire fournit un moyen de persister un objet

de telle manière que l'objet peut être reconstruit automatiquement.

Le formateur SOAP stocke les mêmes informations que le formateur binaire, mais dans le format SOAP.

Le formateur SOAP produit un flux qui a une taille plus grande que celle produite par le formateur binaire. (Tous les types sont considérés comme des chaines.)

La Sérialisation SOAP est facilement transportée par réseau. N.B : Il faut importer manuellement la DLL :

System.Runtime.Serialization.Formatters.Soap.dll

10/04/23

Page 15: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 15

Exemple de Sérialisation :

Exemple de Désérialisation :

public void SOAPSerialisation(string fichier, Employee emp) {   FileStream fstr = new FileStream(fichier, FileMode.Create);   SoapFormatter soapformatter = new SoapFormatter();   soapformatter.Serialize(fstr, emp);   fstr.Close(); }

public void SOAPSerialisation(string fichier, Employee emp) {   FileStream fstr = new FileStream(fichier, FileMode.Create);   SoapFormatter soapformatter = new SoapFormatter();   soapformatter.Serialize(fstr, emp);   fstr.Close(); }public static Employee SOAPDeserialisation(string fichier) {   FileStream fstr = new FileStream(filename, FileMode.Open);   SoapFormatter soapformatter = new SoapFormatter();   Employee emp = (Employee)soapformatter.Deserialize(fstr);   fstr.Close();   return emp; }

public static Employee SOAPDeserialisation(string fichier) {   FileStream fstr = new FileStream(filename, FileMode.Open);   SoapFormatter soapformatter = new SoapFormatter();   Employee emp = (Employee)soapformatter.Deserialize(fstr);   fstr.Close();   return emp; }

10/04/23

Page 16: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 16

Démos : Serialisation_SOAP

10/04/23

Page 17: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 17

[NonSerialized] : Dans certaines situations, on ne veut pas sérialiser tout les attributs de la classe.

Objet d’objet : Lors de la sérialisation d’un objet x de la classe X qui contient un objet y comme attribut, la classe Y doit être marquée par [Serialisable].

Héritage : l’attribut [Serialisable] n’est pas héréditaire. La classe fille doit être marquée par cet attribut.

Démos : Controle_Serialisation Serialisation_Binaire_Liste Serialisation_Binaire_Heritage

10/04/23

Page 18: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 18

La sérialisation XML produit des données peuvent être lues par n'importe quelle application qui comprend XML, indépendamment des programmes ou des plates formes.

Elle donne au programmeur une très large souplesse dans la personnalisation de la sortie.

On peut spécifier si un champ est un attribut ou un élément, déterminer l'espace de noms XML…

La sérialisation XML sérialise uniquement les propriétés et champs publics (get et set) et ne préserve pas la fidélité des types.

La classe de base pour réaliser une sérialisation XML est : System.Xml.Serialization.XmlSerializer

10/04/23

Page 19: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 19

La Sérialisation XML peut être contrôlé par des attributs : XmlRoot : représente le nom de la racine du document XML

de, donc ne vaut que pour une classe. XmlAttribute : représente un attribut XML. XmlElement : représente un élément XML. XmlArray : représente un tableau XML. XmlArrayItem : représente un élément du tableau XML. … (tout ce qu’on peut mettre dans un documents XML ) Exemple :

[XmlAttribute("empName")] public string EmpName {   get{return empName;}   set{empName = value;} }

[XmlAttribute("empName")] public string EmpName {   get{return empName;}   set{empName = value;} }

10/04/23

Page 20: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 20

Exemple de Sérialisation :

public void XMLSerialiser(Employee emp, String fichier) {   XmlSerializer serializer = null; //Using System.XML.Serialization;   FileStream stream = null;   try   {     serializer = new XmlSerializer(typeof(Employee));     stream = new FileStream(fichier, FileMode.Create, FileAccess.Write);     serializer.Serialize(stream, emp);   }   finally   {     if (stream != null)       stream.Close();   } }

public void XMLSerialiser(Employee emp, String fichier) {   XmlSerializer serializer = null; //Using System.XML.Serialization;   FileStream stream = null;   try   {     serializer = new XmlSerializer(typeof(Employee));     stream = new FileStream(fichier, FileMode.Create, FileAccess.Write);     serializer.Serialize(stream, emp);   }   finally   {     if (stream != null)       stream.Close();   } } 10/04/23

Page 21: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 21

Exemple de Désérialisation :

public static Employee XMLDeserialiser(String fichier) {   XmlSerializer deser = null;   FileStream stream = null;   Employee emp = new Employee();   try{     deser = new XmlSerializer(typeof(Employee));     stream = new FileStream(fichier, FileMode.Open);     emp = (Employee)deser.Deserialize(stream);   }   finally{     if (stream != null)       stream.Close();   }   return emp; }

public static Employee XMLDeserialiser(String fichier) {   XmlSerializer deser = null;   FileStream stream = null;   Employee emp = new Employee();   try{     deser = new XmlSerializer(typeof(Employee));     stream = new FileStream(fichier, FileMode.Open);     emp = (Employee)deser.Deserialize(stream);   }   finally{     if (stream != null)       stream.Close();   }   return emp; }

10/04/23

Page 22: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 22

Démos : Serialisation_XML_non_formate Serialisation_XML_formate XML_Objet_Objet XML_Liste

10/04/23

Page 23: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 23

Dans certains cas la sérialisation classique n’est pas suffisante. Ajout du traitement lors de la sérialisation. Contrôle de la sérialisation. La Sérialisation personnalisée, est réalisée en implémentant

l’interface « ISerializable »void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) {

... // La Sérialisation Personalisée }

void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) {

... // La Sérialisation Personalisée }

protected Object(SerializationInfo info, StreamingContext context) {

... // Constructeur pour la désérialisaton }

protected Object(SerializationInfo info, StreamingContext context) {

... // Constructeur pour la désérialisaton }

10/04/23

Page 24: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 24

Démos : Serialisation_Personalise Serial_Perso_Collection

10/04/23

Page 25: Sérialisation, Persistance Et Mapping Objet Relationnel

Mapping O/R

Page 26: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 26

Base de données != Objets Base de données : Tables, colonnes, type simples … Clés : primaires, étrangères, index ... Relations Héritage Objets : Classe, champs, propriété. Compositions (Type Complexe). Relations Héritage, Polymorphisme

10/04/23

Page 27: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 27

Les difficultés de cohabitation entre les mondes objets et relationnels sont résolues grâce au concept de Mapping objet-relationnel (O/R Mapping), qui est le nom donné aux techniques de transformation des modèles objets en modèles relationnels.

Le mapping Objet Relationnel (O.R.M), est une technique qui permet de créer l’illusion d’une base de données orienté objet à partir d’une base de données relationnel en définissant une correspondance entre cette base et des classes (objets).

M.O.R permet d'appliquer une analyse et une modélisation orienté-objet proprement en cachant les spécificités liées à l'usage d'un système relationnel.

Base de

données

Mapping O.R

Objets

10/04/23

Page 28: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 28

Un logiciel de Mapping Objet / Relationnel est une couche de persistance connectant les objets d'un système orienté-objet à des données stockées dans une base de données relationnel.

Il permet d'appliquer une analyse et une modélisation orienté-objet proprement en cachant les spécificités liées à l'usage d'un système relationnel.

Il existe plusieurs types de logiciels de Mapping Objet / Relationnel :

Purement Relationnel: Pas de MOR; utilise des tables et des lignes.

Mapping Objet Faible: des lignes de tables sont manuellement converties en objets.

Mapping Objet Intermédiaire: L'application est conçus avec des objets. Les associations et collections peuvent être mappées.

Mapping Objet Total: Solution plus avancée que le Mapping Objet Intermédiaire; elle permet des liaisons complexes

.Net est compatible avec plusieurs Logiciels Mapping OR:

ADO.NET, Opf3, Evaluant DTM, ObjectSpace, Nhibernate …

10/04/23

Page 29: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 29

NHibernate est le portage de l'excellent  Hibernate, outil de persistance relationnel vers la plate-forme .NET

Une solution dominante pour le mapping objet / relationnel (MOR) et la persistance d'objets.

Nhibernate est flexible : on peut définir comment persister chaque propriété et relation.

Nhibernate permet d’effectuer des requêtes en utilisant un langage de requête très concis et puissant.

NHibernate utilise l'API. NET, et ne génère pas de code supplémentaire ou du Bytecode.

Nhibernate est Open Source (Sous licence LGPL). Nhibernate est indépendant des SGBD. Pour utiliser Nhibernate dans un projet .Net il faut importer les

DLL : NHibernate.dll log4net.dll NHibernate.Mapping.Attributes.dl

10/04/23

Page 30: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 30

Nhibernate ajoute une couche de persistance entre la couche d’accès au donnée set l’application.

10/04/23

Page 31: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 3110/04/23

Page 32: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 32

Le fichier de configuration doit être chargé avec l'objet Configuration

L'assembly qui contient toute la couche métier doit être chargée avec

l'instance de Configuration déjà crée. L’instanciation d’un objet factory avec l’objet de configuration. A chaque fois qu'il est nécessaire de faire un traitement sur la

base

de données, il est nécessaire de créer une nouvelle session avec

L’objet factory. Si nécessaire, l’utilisation des transaction avec l’objet session

pour bénéficier du mécanisme de transactions, avec la possibilité de commit et de rollback.

A la fin de la session (lorsque les données sont traitées), l faut fermer la session. (également faire un commit la transaction)

A la fermeture du programme, on ferme la factory (ce qui ferme proprement la connexion à la base de données)

10/04/23

Page 33: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 33

En général le fichier de configuration est nommé "App.config" pour une application windows, ou "Web.config" pour une application Web (en ASP.NET), est située à la racine du projet qui contient l‘executable.

ce n'est pas un fichier NHibernate proprement dit.

10/04/23

<?xml version="1.0" encoding="utf-8" ?><configuration>

<configSections>…

</configSections> <nhibernate>

… </nhibernate>

</configuration>

<?xml version="1.0" encoding="utf-8" ?><configuration>

<configSections>…

</configSections> <nhibernate>

… </nhibernate>

</configuration>

Page 34: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 3410/04/23

<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </configSections> <nhibernate> <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> <add key="hibernate.connection.connection_string" value="Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI"/> </nhibernate></configuration>

<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </configSections> <nhibernate> <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> <add key="hibernate.connection.connection_string" value="Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI"/> </nhibernate></configuration>

Page 35: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 3510/04/23

<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </configSections> <nhibernate> <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> <add key="hibernate.connection.connection_string" value="Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI"/> </nhibernate></configuration>

<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </configSections> <nhibernate> <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> <add key="hibernate.connection.connection_string" value="Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI"/> </nhibernate></configuration>

Déclaration de la section NHibernate qui va suivreDéclaration de la section NHibernate qui va suivre

Page 36: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 3610/04/23

<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </configSections> <nhibernate> <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> <add key="hibernate.connection.connection_string" value="Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI"/> </nhibernate></configuration>

<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </configSections> <nhibernate> <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> <add key="hibernate.connection.connection_string" value="Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI"/> </nhibernate></configuration>

Début de la section NHibernate pour le

fichier de configuration4 clefs sont importantes

Début de la section NHibernate pour le

fichier de configuration4 clefs sont importantes

Page 37: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 3710/04/23

<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </configSections> <nhibernate> <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> <add key="hibernate.connection.connection_string" value="Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI"/> </nhibernate></configuration>

<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </configSections> <nhibernate> <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> <add key="hibernate.connection.connection_string" value="Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI"/> </nhibernate></configuration>

La première est liée à la méthode utilisée par NHibernate pour se

connecter

La première est liée à la méthode utilisée par NHibernate pour se

connecter

Page 38: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 3810/04/23

<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </configSections> <nhibernate> <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> <add key="hibernate.connection.connection_string" value="Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI"/> </nhibernate></configuration>

<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </configSections> <nhibernate> <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> <add key="hibernate.connection.connection_string" value="Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI"/> </nhibernate></configuration>

La seconde clef est liée au dialecte (Langage

SQL)

La seconde clef est liée au dialecte (Langage

SQL)

Page 39: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 3910/04/23

<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </configSections> <nhibernate> <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> <add key="hibernate.connection.connection_string" value="Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI"/> </nhibernate></configuration>

<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </configSections> <nhibernate> <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> <add key="hibernate.connection.connection_string" value="Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI"/> </nhibernate></configuration>

La troisième clef est liée au driver utilisé par NHibernate pour communiquer avec la

base de données

La troisième clef est liée au driver utilisé par NHibernate pour communiquer avec la

base de données

Page 40: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 4010/04/23

<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </configSections> <nhibernate> <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> <add key="hibernate.connection.connection_string" value="Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI"/> </nhibernate></configuration>

<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </configSections> <nhibernate> <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/> <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect"/> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/> <add key="hibernate.connection.connection_string" value="Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI"/> </nhibernate></configuration>

Une dernière clef est liée à la chaîne de connexion

Une dernière clef est liée à la chaîne de connexion

Page 41: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 41

Le fichier de configuration permet au Nhibernate de communiquer avec la base de données.

Après la création du fichier de configuration il faut initialiser Nhibernate.

10/04/23

Configuration cfg = new Configuration();     cfg.AddAssembly(“Mon_Assembly");     ISessionFactory factory = cfg.BuildSessionFactory();     session = factory.OpenSession();     ITransaction t = session.BeginTransaction();…… …      t.Commit();      session.Flush();      session.Close();      factory.Close();

Configuration cfg = new Configuration();     cfg.AddAssembly(“Mon_Assembly");     ISessionFactory factory = cfg.BuildSessionFactory();     session = factory.OpenSession();     ITransaction t = session.BeginTransaction();…… …      t.Commit();      session.Flush();      session.Close();      factory.Close();

Page 42: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 42

Le fichier de configuration permet au Nhibernate de communiquer avec la base de données.

Après la création du fichier de configuration il faut initialiser Nhibernate.

10/04/23

Configuration cfg = new Configuration();     cfg.AddAssembly(“Mon_Assembly");     ISessionFactory factory = cfg.BuildSessionFactory();     session = factory.OpenSession();     ITransaction t = session.BeginTransaction();…… …      t.Commit();      session.Flush();      session.Close();      factory.Close();

Configuration cfg = new Configuration();     cfg.AddAssembly(“Mon_Assembly");     ISessionFactory factory = cfg.BuildSessionFactory();     session = factory.OpenSession();     ITransaction t = session.BeginTransaction();…… …      t.Commit();      session.Flush();      session.Close();      factory.Close();

Le chargement de la configuration. l'objet va se charger lui-même avec les

paramètres données dans le fichiers de configuration

Le chargement de la configuration. l'objet va se charger lui-même avec les

paramètres données dans le fichiers de configuration

Page 43: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 43

Le fichier de configuration permet au Nhibernate de communiquer avec la base de données.

Après la création du fichier de configuration il faut initialiser Nhibernate.

10/04/23

Configuration cfg = new Configuration();     cfg.AddAssembly(“Mon_Assembly");     ISessionFactory factory = cfg.BuildSessionFactory();     session = factory.OpenSession();     ITransaction t = session.BeginTransaction();…… …      t.Commit();      session.Flush();      session.Close();      factory.Close();

Configuration cfg = new Configuration();     cfg.AddAssembly(“Mon_Assembly");     ISessionFactory factory = cfg.BuildSessionFactory();     session = factory.OpenSession();     ITransaction t = session.BeginTransaction();…… …      t.Commit();      session.Flush();      session.Close();      factory.Close();

L'objet configuration charge l'assembly qui contient la

couche métier

L'objet configuration charge l'assembly qui contient la

couche métier

Page 44: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 44

Le fichier de configuration permet au Nhibernate de communiquer avec la base de données.

Après la création du fichier de configuration il faut initialiser Nhibernate.

10/04/23

Configuration cfg = new Configuration();     cfg.AddAssembly(“Mon_Assembly");     ISessionFactory factory = cfg.BuildSessionFactory();     session = factory.OpenSession();     ITransaction t = session.BeginTransaction();…… …      t.Commit();      session.Flush();      session.Close();      factory.Close();

Configuration cfg = new Configuration();     cfg.AddAssembly(“Mon_Assembly");     ISessionFactory factory = cfg.BuildSessionFactory();     session = factory.OpenSession();     ITransaction t = session.BeginTransaction();…… …      t.Commit();      session.Flush();      session.Close();      factory.Close();

Création d’un objet session factory

Création d’un objet session factory

Page 45: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 45

Le fichier de configuration permet au Nhibernate de communiquer avec la base de données.

Après la création du fichier de configuration il faut initialiser Nhibernate.

10/04/23

Configuration cfg = new Configuration();     cfg.AddAssembly(“Mon_Assembly");     ISessionFactory factory = cfg.BuildSessionFactory();     session = factory.OpenSession();     ITransaction t = session.BeginTransaction();…… …      t.Commit();      session.Flush();      session.Close();      factory.Close();

Configuration cfg = new Configuration();     cfg.AddAssembly(“Mon_Assembly");     ISessionFactory factory = cfg.BuildSessionFactory();     session = factory.OpenSession();     ITransaction t = session.BeginTransaction();…… …      t.Commit();      session.Flush();      session.Close();      factory.Close();

Création d’un e session avec la méthode OpenSession

Création d’un e session avec la méthode OpenSession

Page 46: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 46

Le fichier de configuration permet au Nhibernate de communiquer avec la base de données.

Après la création du fichier de configuration il faut initialiser Nhibernate.

10/04/23

Configuration cfg = new Configuration();     cfg.AddAssembly(“Mon_Assembly");     ISessionFactory factory = cfg.BuildSessionFactory();     session = factory.OpenSession();     ITransaction t = session.BeginTransaction();…… …      t.Commit();      session.Flush();      session.Close();      factory.Close();

Configuration cfg = new Configuration();     cfg.AddAssembly(“Mon_Assembly");     ISessionFactory factory = cfg.BuildSessionFactory();     session = factory.OpenSession();     ITransaction t = session.BeginTransaction();…… …      t.Commit();      session.Flush();      session.Close();      factory.Close();

Création d’une transactionCréation d’une transaction

Page 47: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 47

La classe persistante doit implémenter son constructeur par défaut explicitement.

Nhibernate persiste les propriétés qui implémentent les getters et les setters. (même les propriétés qui ne sont pas public).

Il est préférable de persistés des classe non-sealed, et d’indiquer le mot « virtual » pour les méthodes.

10/04/23

class Personne { private int id; private string nom;

public virtual int Id { get { return id; } set { id = value; } }

class Personne { private int id; private string nom;

public virtual int Id { get { return id; } set { id = value; } }

Page 48: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 48

La classe persistante doit implémenter son constructeur par défaut explicitement.

Nhibernate persiste les propriétés qui implémentent les getters et les setters. (même les propriétés qui ne sont pas public).

Il est préférable de persistés des classe non-sealed, et d’indiquer le mot « virtual » pour les méthodes.

10/04/23

public virtual string Nom { get { return nom; } set { nom = value; } }public Personne() { } public Personne(int id, string nom) { this.id = id; this.nom = nom; } } // de la classe

public virtual string Nom { get { return nom; } set { nom = value; } }public Personne() { } public Personne(int id, string nom) { this.id = id; this.nom = nom; } } // de la classe

Page 49: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 49

La déclaration du mapping d’une classe vers une table, est effectuer via un fichier XML.

Il s’agit d’un fichier XML dont le nom est de la forme : Nom_classe.hbm.xml

Le "hbm" dans le nom de fichier est très important, puisque c'est grâce à lui, NHibernate le détecte comme un fichier de mapping.

10/04/23

<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Mapping_Personne"> <class name="Mapping_Personne.Personne" table="personne"> <id name="Id" column="id" type="Int32"> <generator class="native"/> </id> <property name="Nom" column="nom" type="String" not-null="true" /> <property name="Prenom" column="prenom" type="String" not-null="true" /> </class></hibernate-mapping>

<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Mapping_Personne"> <class name="Mapping_Personne.Personne" table="personne"> <id name="Id" column="id" type="Int32"> <generator class="native"/> </id> <property name="Nom" column="nom" type="String" not-null="true" /> <property name="Prenom" column="prenom" type="String" not-null="true" /> </class></hibernate-mapping>

Page 50: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 50

La déclaration du mapping d’une classe vers une table, est effectuer via un fichier XML.

Il s’agit d’un fichier XML dont le nom est de la forme : Nom_classe.hbm.xml

Le "hbm" dans le nom de fichier est très important, puisque c'est grâce à lui, NHibernate le détecte comme un fichier de mapping.

10/04/23

<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Mapping_Personne"> <class name="Mapping_Personne.Personne" table="personne"> <id name="Id" column="id" type="Int32"> <generator class="native"/> </id> <property name="Nom" column="nom" type="String" not-null="true" /> <property name="Prenom" column="prenom" type="String" not-null="true" /> </class></hibernate-mapping>

<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Mapping_Personne"> <class name="Mapping_Personne.Personne" table="personne"> <id name="Id" column="id" type="Int32"> <generator class="native"/> </id> <property name="Nom" column="nom" type="String" not-null="true" /> <property name="Prenom" column="prenom" type="String" not-null="true" /> </class></hibernate-mapping>

Déclaration du fichier de mapping

Déclaration du fichier de mapping

Page 51: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 51

La déclaration du mapping d’une classe vers une table, est effectuer via un fichier XML.

Il s’agit d’un fichier XML dont le nom est de la forme : Nom_classe.hbm.xml

Le "hbm" dans le nom de fichier est très important, puisque c'est grâce à lui, NHibernate le détecte comme un fichier de mapping.

10/04/23

<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Mapping_Personne"> <class name="Mapping_Personne.Personne" table="personne"> <id name="Id" column="id" type="Int32"> <generator class="native"/> </id> <property name="Nom" column="nom" type="String" not-null="true" /> <property name="Prenom" column="prenom" type="String" not-null="true" /> </class></hibernate-mapping>

<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Mapping_Personne"> <class name="Mapping_Personne.Personne" table="personne"> <id name="Id" column="id" type="Int32"> <generator class="native"/> </id> <property name="Nom" column="nom" type="String" not-null="true" /> <property name="Prenom" column="prenom" type="String" not-null="true" /> </class></hibernate-mapping>

Définit le nom de la classe et le nom de la table dans

laquelle la classe est persistée

Définit le nom de la classe et le nom de la table dans

laquelle la classe est persistée

Page 52: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 52

La déclaration du mapping d’une classe vers une table, est effectuer via un fichier XML.

Il s’agit d’un fichier XML dont le nom est de la forme : Nom_classe.hbm.xml

Le "hbm" dans le nom de fichier est très important, puisque c'est grâce à lui, NHibernate le détecte comme un fichier de mapping.

10/04/23

<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Mapping_Personne"> <class name="Mapping_Personne.Personne" table="personne"> <id name="Id" column="id" type="Int32"> <generator class="identity"/> </id> <property name="Nom" column="nom" type="String" not-null="true" /> <property name="Prenom" column="prenom" type="String" not-null="true" /> </class></hibernate-mapping>

<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Mapping_Personne"> <class name="Mapping_Personne.Personne" table="personne"> <id name="Id" column="id" type="Int32"> <generator class="identity"/> </id> <property name="Nom" column="nom" type="String" not-null="true" /> <property name="Prenom" column="prenom" type="String" not-null="true" /> </class></hibernate-mapping>

Mappe la clef primaire de la table à un membre de la

classe.

Mappe la clef primaire de la table à un membre de la

classe.

Page 53: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 53

La déclaration du mapping d’une classe vers une table, est effectuer via un fichier XML.

Il s’agit d’un fichier XML dont le nom est de la forme : Nom_classe.hbm.xml

Le "hbm" dans le nom de fichier est très important, puisque c'est grâce à lui, NHibernate le détecte comme un fichier de mapping.

10/04/23

<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Mapping_Personne"> <class name="Mapping_Personne.Personne" table="personne"> <id name="Id" column="id" type="Int32"> <generator class="identity"/> </id> <property name="Nom" column="nom" type="String" not-null="true" /> <property name="Prenom" column="prenom" type="String" not-null="true" /> </class></hibernate-mapping>

<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Mapping_Personne"> <class name="Mapping_Personne.Personne" table="personne"> <id name="Id" column="id" type="Int32"> <generator class="identity"/> </id> <property name="Nom" column="nom" type="String" not-null="true" /> <property name="Prenom" column="prenom" type="String" not-null="true" /> </class></hibernate-mapping>

La méthode par laquelle la clef primaire sera créée. « identity » indique que la

clef primaire est automatiquement générée

par la base de données

La méthode par laquelle la clef primaire sera créée. « identity » indique que la

clef primaire est automatiquement générée

par la base de données

Page 54: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 54

La déclaration du mapping d’une classe vers une table, est effectuer via un fichier XML.

Il s’agit d’un fichier XML dont le nom est de la forme : Nom_classe.hbm.xml

Le "hbm" dans le nom de fichier est très important, puisque c'est grâce à lui, NHibernate le détecte comme un fichier de mapping.

10/04/23

<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Mapping_Personne"> <class name="Mapping_Personne.Personne" table="personne"> <id name="Id" column="id" type="Int32"> <generator class="identity"/> </id> <property name="Nom" column="nom" type="String" not-null="true" /> <property name="Prenom" column="prenom" type="String" not-null="true" /> </class></hibernate-mapping>

<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Mapping_Personne"> <class name="Mapping_Personne.Personne" table="personne"> <id name="Id" column="id" type="Int32"> <generator class="identity"/> </id> <property name="Nom" column="nom" type="String" not-null="true" /> <property name="Prenom" column="prenom" type="String" not-null="true" /> </class></hibernate-mapping>

La balise property est la façon la plus simple de mapper un champ de la base de données à un membre d'une classe

La balise property est la façon la plus simple de mapper un champ de la base de données à un membre d'une classe

Page 55: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 55

Il y a trois façons de construire des requêtes avec Nhibernate : Requête SQL native :

utiliser une requête directement dans le dialecte de la BDD sous jacente va engendrer une perte de portabilité.

Il vaut mieux l’éviter. Requête HQL (Hibernate Query Languge) :

Ressemble beaucoup à du SQL. Manipule directement des objets au lieu de tables Ces Requêtes sont indépendantes des SGBD.

Requêtes Criteria : Ces requêtes sont construites avec les Factory. Ils sont orientées objets, et indépendantes des SGBD.

10/04/23

Page 56: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 56

Requêtes SQL native :

Le résultat une IList qui contient les éléments conformes aux critères.

10/04/23

Configuration cfg = new Configuration();cfg.AddAssembly(“Mon_Assembly");ISessionFactory factory = cfg.BuildSessionFactory();session = factory.OpenSession();IList listepres = session.CreateSQLQuery("select * from personne", "Personne", typeof(Personne)).List();foreach (Personne pers in listepers)

Console.WriteLine(pers.Id+” “+pers.Nom+” “+pers.Prenom);

session.Close();factory.Close();

Configuration cfg = new Configuration();cfg.AddAssembly(“Mon_Assembly");ISessionFactory factory = cfg.BuildSessionFactory();session = factory.OpenSession();IList listepres = session.CreateSQLQuery("select * from personne", "Personne", typeof(Personne)).List();foreach (Personne pers in listepers)

Console.WriteLine(pers.Id+” “+pers.Nom+” “+pers.Prenom);

session.Close();factory.Close();

Page 57: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 57

Requêtes HQL :

Le résultat une IList qui contient les éléments conformes aux critères.

10/04/23

Configuration cfg = new Configuration();cfg.AddAssembly(“Mon_Assembly");ISessionFactory factory = cfg.BuildSessionFactory();session = factory.OpenSession();IList listepers = session.CreateQuery("from Personne").List();foreach (Personne pers in listepers)

Console.WriteLine(pers.Id+” “+pers.Nom+” “+pers.Prenom);

session.Close();factory.Close();

Configuration cfg = new Configuration();cfg.AddAssembly(“Mon_Assembly");ISessionFactory factory = cfg.BuildSessionFactory();session = factory.OpenSession();IList listepers = session.CreateQuery("from Personne").List();foreach (Personne pers in listepers)

Console.WriteLine(pers.Id+” “+pers.Nom+” “+pers.Prenom);

session.Close();factory.Close();

Page 58: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 58

Requêtes Criteria :

Le résultat est un ICriteria qui contient comme attributs une liste des éléments conformes aux critères.

10/04/23

Configuration cfg = new Configuration();cfg.AddAssembly(“Mon_Assembly");ISessionFactory factory = cfg.BuildSessionFactory();session = factory.OpenSession();ICriteria c = session.CreateCriteria(typeof(Personne))

. Add(Expression.Eq(“Nom", “root@khalid"));

foreach (Personne pers in c.List())Console.WriteLine(pers.Id+” “+pers.Nom+” “+pers.Prenom);

session.Close();factory.Close();

Configuration cfg = new Configuration();cfg.AddAssembly(“Mon_Assembly");ISessionFactory factory = cfg.BuildSessionFactory();session = factory.OpenSession();ICriteria c = session.CreateCriteria(typeof(Personne))

. Add(Expression.Eq(“Nom", “root@khalid"));

foreach (Personne pers in c.List())Console.WriteLine(pers.Id+” “+pers.Nom+” “+pers.Prenom);

session.Close();factory.Close();

Page 59: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 59

La méthode load de ISession : Si on connaît l’identifiant, on peu utiliser la méthode load de

l’instance ISession. Le résultat est une instance de la classe persistante.

10/04/23

Configuration cfg = new Configuration();cfg.AddAssembly(“Mon_Assembly");ISessionFactory factory = cfg.BuildSessionFactory();session = factory.OpenSession();

Console.Write("Entrer le id : ");int id = Convert.ToInt32(Console.ReadLine());Personne pers = new Personne();session.Load(pers, id);Console.WriteLine(pers.Nom+ " " + pers.Prenom);

session.Close();factory.Close();

Configuration cfg = new Configuration();cfg.AddAssembly(“Mon_Assembly");ISessionFactory factory = cfg.BuildSessionFactory();session = factory.OpenSession();

Console.Write("Entrer le id : ");int id = Convert.ToInt32(Console.ReadLine());Personne pers = new Personne();session.Load(pers, id);Console.WriteLine(pers.Nom+ " " + pers.Prenom);

session.Close();factory.Close();

Page 60: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 6010/04/23

Insertion :Configuration cfg = new Configuration();cfg.AddAssembly(“Mon_Assembly");ISessionFactory factory = cfg.BuildSessionFactory();session = factory.OpenSession();ITransaction tr = session.BeginTransaction();

Console.Write("Entrer le id : ");int id = Convert.ToInt32(Console.ReadLine()); Console.Write("Entrer le nom : ");String nom=Console.ReadLine();Personne pers = new Personne(id, nom);session.save(pers, id);

tr.commit();session.Close();factory.Close();

Configuration cfg = new Configuration();cfg.AddAssembly(“Mon_Assembly");ISessionFactory factory = cfg.BuildSessionFactory();session = factory.OpenSession();ITransaction tr = session.BeginTransaction();

Console.Write("Entrer le id : ");int id = Convert.ToInt32(Console.ReadLine()); Console.Write("Entrer le nom : ");String nom=Console.ReadLine();Personne pers = new Personne(id, nom);session.save(pers, id);

tr.commit();session.Close();factory.Close();

Page 61: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 6110/04/23

Modification :Configuration cfg = new Configuration();cfg.AddAssembly(“Mon_Assembly");ISessionFactory factory = cfg.BuildSessionFactory();session = factory.OpenSession();ITransaction tr = session.BeginTransaction();

Console.Write("Entrer le id à modifier: ");int id = Convert.ToInt32(Console.ReadLine()); Console.Write("Entrer le nouveau nom : ");String nom=Console.ReadLine();Personne pers = new Personne(id, nom);session.save(pers);

tr.commit();session.Close();factory.Close();

Configuration cfg = new Configuration();cfg.AddAssembly(“Mon_Assembly");ISessionFactory factory = cfg.BuildSessionFactory();session = factory.OpenSession();ITransaction tr = session.BeginTransaction();

Console.Write("Entrer le id à modifier: ");int id = Convert.ToInt32(Console.ReadLine()); Console.Write("Entrer le nouveau nom : ");String nom=Console.ReadLine();Personne pers = new Personne(id, nom);session.save(pers);

tr.commit();session.Close();factory.Close();

Page 62: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. 6210/04/23

Suppression :Configuration cfg = new Configuration();cfg.AddAssembly(“Mon_Assembly");ISessionFactory factory = cfg.BuildSessionFactory();session = factory.OpenSession();ITransaction tr = session.BeginTransaction();

Console.Write("Entrer le id à supprimer : ");int id = Convert.ToInt32(Console.ReadLine()); Console.Write("Entrer le nom : ");String nom=Console.ReadLine();Personne pers = new Personne(id, nom);session.delete(pers);

tr.commit();session.Close();factory.Close();

Configuration cfg = new Configuration();cfg.AddAssembly(“Mon_Assembly");ISessionFactory factory = cfg.BuildSessionFactory();session = factory.OpenSession();ITransaction tr = session.BeginTransaction();

Console.Write("Entrer le id à supprimer : ");int id = Convert.ToInt32(Console.ReadLine()); Console.Write("Entrer le nom : ");String nom=Console.ReadLine();Personne pers = new Personne(id, nom);session.delete(pers);

tr.commit();session.Close();factory.Close();

Page 63: Sérialisation, Persistance Et Mapping Objet Relationnel

Document Libre. www.allili.net 63

Démos : Mapping_Personne

10/04/23

Page 64: Sérialisation, Persistance Et Mapping Objet Relationnel