Sérialisation, Persistance et Mapping Objet Relationnel
Document Libre.  www.allili.net Sérialisation Mapping O/R <ul><li>Introduction </li></ul><ul><li>Exemples d’utilisation </...
Sérialisation et Persistance
Document Libre.  www.allili.net <ul><li>La  sérialisation  est le processus de sauvegarde de l’état d’un objet à destinati...
Document Libre.  www.allili.net <ul><li>Avantages : </li></ul><ul><li>Faciliter le partage d’objets entre applications. </...
Document Libre.  www.allili.net <ul><li>Quelques exemples d’utilisation : </li></ul><ul><li>Les applications Windows Clien...
Document Libre.  www.allili.net <ul><li>Afin de sérialiser un objet en .net, nous avons besoin d’un flux de données et d’u...
Document Libre.  www.allili.net <ul><li>Il ya trois formats fournis par le Framework. NET pour les objets qui peuvent être...
Document Libre.  www.allili.net <ul><li>Afin qu’une classe peux être sérialiser on doit placer l’attribut [Serilizable] en...
Document Libre.  www.allili.net <ul><li>BinaryFormatter  :  </li></ul><ul><li>Il y a émission d’octets en flux continu à p...
Document Libre.  www.allili.net <ul><li>Sérialisation : </li></ul>public   void  Serialiser( string  fichier, Employee emp...
Document Libre.  www.allili.net <ul><li>Désérialisation : </li></ul>public   static   employee  Deserialiser( string  fich...
Document Libre.  www.allili.net <ul><li>Démos : </li></ul><ul><ul><ul><ul><li>Serialisation_Binaire </li></ul></ul></ul></...
Document Libre.  www.allili.net <ul><li>SOAP est le protocole idéal pour la communication entre les applications qui utili...
Document Libre.  www.allili.net <ul><li>Exemple de Sérialisation : </li></ul><ul><li>Exemple de Désérialisation : </li></u...
Document Libre.  www.allili.net <ul><li>Démos : </li></ul><ul><ul><ul><ul><li>Serialisation_SOAP </li></ul></ul></ul></ul>...
Document Libre.  www.allili.net <ul><li>[NonSerialized] : Dans certaines situations, on ne veut pas sérialiser tout les at...
Document Libre.  www.allili.net <ul><li>La sérialisation XML produit des données peuvent être lues par n'importe quelle ap...
Document Libre.  www.allili.net <ul><li>La Sérialisation XML peut être contrôlé par des attributs : </li></ul><ul><li>XmlR...
Document Libre.  www.allili.net <ul><li>Exemple de Sérialisation : </li></ul>public   void  XMLSerialiser(Employee emp, St...
Document Libre.  www.allili.net <ul><li>Exemple de Désérialisation : </li></ul>public   static  Employee XMLDeserialiser(S...
Document Libre.  www.allili.net <ul><li>Démos : </li></ul><ul><ul><ul><ul><li>Serialisation_XML_non_formate </li></ul></ul...
Document Libre.  www.allili.net <ul><li>Dans certains cas la sérialisation classique n’est pas suffisante. </li></ul><ul><...
Document Libre.  www.allili.net <ul><li>Démos : </li></ul><ul><ul><ul><ul><li>Serialisation_Personalise </li></ul></ul></u...
Mapping O/R
Document Libre.  www.allili.net <ul><li>Base de données != Objets </li></ul><ul><ul><li>Base de données : </li></ul></ul><...
Document Libre.  www.allili.net <ul><li>Les difficultés de cohabitation entre les mondes objets et relationnels sont résol...
Document Libre.  www.allili.net <ul><li>Un logiciel de Mapping Objet / Relationnel est une couche de persistance connectan...
Document Libre.  www.allili.net <ul><li>NHibernate  est le portage de l'excellent  Hibernate, outil de persistance relatio...
Document Libre.  www.allili.net <ul><li>Nhibernate ajoute une couche de persistance entre la couche d’accès au donnée set ...
Document Libre.  www.allili.net 05/06/09
Document Libre.  www.allili.net <ul><li>Le fichier de configuration doit être chargé avec l'objet Configuration </li></ul>...
Document Libre.  www.allili.net <ul><li>En général le fichier de configuration est nommé &quot;App.config&quot; pour une a...
Document Libre.  www.allili.net 05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <configuration> <conf...
Document Libre.  www.allili.net 05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <configuration> <conf...
Document Libre.  www.allili.net 05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <configuration> <conf...
Document Libre.  www.allili.net 05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <configuration> <conf...
Document Libre.  www.allili.net 05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <configuration> <conf...
Document Libre.  www.allili.net 05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <configuration> <conf...
Document Libre.  www.allili.net 05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <configuration> <conf...
Document Libre.  www.allili.net <ul><li>Le fichier de configuration permet au Nhibernate de communiquer avec la base de do...
Document Libre.  www.allili.net <ul><li>Le fichier de configuration permet au Nhibernate de communiquer avec la base de do...
Document Libre.  www.allili.net <ul><li>Le fichier de configuration permet au Nhibernate de communiquer avec la base de do...
Document Libre.  www.allili.net <ul><li>Le fichier de configuration permet au Nhibernate de communiquer avec la base de do...
Document Libre.  www.allili.net <ul><li>Le fichier de configuration permet au Nhibernate de communiquer avec la base de do...
Document Libre.  www.allili.net <ul><li>Le fichier de configuration permet au Nhibernate de communiquer avec la base de do...
Document Libre.  www.allili.net <ul><li>La classe persistante doit implémenter son constructeur par défaut explicitement. ...
Document Libre.  www.allili.net <ul><li>La classe persistante doit implémenter son constructeur par défaut explicitement. ...
Document Libre.  www.allili.net <ul><li>La déclaration du mapping d’une classe vers une table, est effectuer via un fichie...
Document Libre.  www.allili.net <ul><li>La déclaration du mapping d’une classe vers une table, est effectuer via un fichie...
Document Libre.  www.allili.net <ul><li>La déclaration du mapping d’une classe vers une table, est effectuer via un fichie...
Document Libre.  www.allili.net <ul><li>La déclaration du mapping d’une classe vers une table, est effectuer via un fichie...
Document Libre.  www.allili.net <ul><li>La déclaration du mapping d’une classe vers une table, est effectuer via un fichie...
Document Libre.  www.allili.net <ul><li>La déclaration du mapping d’une classe vers une table, est effectuer via un fichie...
Document Libre.  www.allili.net <ul><li>Il y a trois façons de construire des requêtes avec Nhibernate : </li></ul><ul><ul...
Document Libre.  www.allili.net <ul><li>Requêtes SQL native  : </li></ul><ul><li>Le résultat une IList qui contient les él...
Document Libre.  www.allili.net <ul><li>Requêtes HQL  : </li></ul><ul><li>Le résultat une IList qui contient les éléments ...
Document Libre.  www.allili.net <ul><li>Requêtes Criteria  : </li></ul><ul><li>Le résultat est un ICriteria qui contient c...
Document Libre.  www.allili.net <ul><li>La méthode load de ISession  : </li></ul><ul><ul><li>Si on connaît l’identifiant, ...
Document Libre.  www.allili.net 05/06/09 <ul><li>Insertion  : </li></ul><ul><ul><ul><li>Configuration cfg = new Configurat...
Document Libre.  www.allili.net 05/06/09 <ul><li>Modification  : </li></ul><ul><ul><ul><li>Configuration cfg = new Configu...
Document Libre. 05/06/09 <ul><li>Suppression  : </li></ul><ul><ul><ul><li>Configuration cfg = new Configuration(); </li></...
Document Libre.  www.allili.net <ul><li>Démos : </li></ul><ul><ul><ul><ul><li>Mapping_Personne </li></ul></ul></ul></ul>05...
 
Prochain SlideShare
Chargement dans…5
×

Sérialisation, Persistance Et Mapping Objet Relationnel

1 540 vues

Publié le

Sérialisation, Persistance Et Mapping Objet Relationnel

0 commentaire
3 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 540
Sur SlideShare
0
Issues des intégrations
0
Intégrations
5
Actions
Partages
0
Téléchargements
105
Commentaires
0
J’aime
3
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Sérialisation, Persistance Et Mapping Objet Relationnel

  1. 1. Sérialisation, Persistance et Mapping Objet Relationnel
  2. 2. Document Libre. www.allili.net Sérialisation Mapping O/R <ul><li>Introduction </li></ul><ul><li>Exemples d’utilisation </li></ul><ul><li>Mécanisme </li></ul><ul><li>[Serializable] et [NonSerialized] </li></ul><ul><li>Sérialisation binaire </li></ul><ul><li>Sérialisation SOAP </li></ul><ul><li>Contrôle de la sérialisation binaire </li></ul><ul><li>Sérialisation XML </li></ul><ul><li>Sérialisation Personnalisée </li></ul><ul><li>Introduction </li></ul><ul><li>Nhibernate </li></ul><ul><ul><li>Présentation </li></ul></ul><ul><ul><li>Architecture </li></ul></ul><ul><ul><li>Mécanisme </li></ul></ul><ul><ul><li>Configuration </li></ul></ul><ul><ul><li>Classe Persistante </li></ul></ul><ul><ul><li>Déclaration du Mapping </li></ul></ul><ul><ul><li>Récupération des données </li></ul></ul><ul><ul><li>Opérations M.A.J </li></ul></ul>05/06/09
  3. 3. Sérialisation et Persistance
  4. 4. Document Libre. www.allili.net <ul><li>La sérialisation est le processus de sauvegarde de l’état d’un objet à destination d’une zone de stockage </li></ul><ul><li>La désérialisation est le processus inverse, reconstituer l’objet depuis un flux de données. </li></ul>05/06/09 Objet Sérialisation en flux de données Mémoire Fichiers Base de données
  5. 5. Document Libre. www.allili.net <ul><li>Avantages : </li></ul><ul><li>Faciliter le partage d’objets entre applications. </li></ul><ul><li>Faciliter le transport d’un objet par réseau. </li></ul><ul><li>Cloner les objects. </li></ul><ul><li>Inconvénients : </li></ul><ul><li>Le principal inconvénient est lié aux ressources (CPU, Périphérique IO). </li></ul><ul><li>La sérialisation XML est non sécurisée. </li></ul><ul><li>La sérialisation XML est lente. </li></ul><ul><li>Sérialisation # Persistance : </li></ul><ul><li>Surtout, il ne faut pas confondre ces deux termes. </li></ul><ul><li>Sérialisation  : Conversion d’un objet en flux de données. Pas de notion de stockage. </li></ul><ul><li>Persistance : fait référence au stockage permanant. </li></ul>05/06/09
  6. 6. Document Libre. www.allili.net <ul><li>Quelques exemples d’utilisation : </li></ul><ul><li>Les applications Windows Clientes : </li></ul><ul><li>La sérialisation peut être utilisé pour sauvegarder l’état de l’application. </li></ul><ul><li>Copier / Coller des objets dans le presse papier. </li></ul><ul><li>Le Remoting .Net </li></ul><ul><li>Partager des objets à travers le réseau </li></ul><ul><li>Le Web Services </li></ul><ul><li>Une classe est particulièrement adaptée au mécanisme de sérialisation. (Format XML) </li></ul>05/06/09
  7. 7. Document Libre. www.allili.net <ul><li>Afin de sérialiser un objet en .net, nous avons besoin d’un flux de données et d’un formateur. </li></ul><ul><li>Le flux de données va contenir l’objet sérialisable. </li></ul><ul><li>Le formateur sérialise l’objet dans le flux de données selon un format déterminé. </li></ul><ul><li>Les formateurs disposent de deux principales méthodes : </li></ul><ul><li>void Serialize( Stream serializationStream , Object graph ) </li></ul><ul><li>{ </li></ul><ul><ul><li>... </li></ul></ul><ul><li>} </li></ul><ul><li>object Deserialize( Stream serializationStream ) </li></ul><ul><li>{ </li></ul><ul><ul><li>... </li></ul></ul><ul><li>} </li></ul>05/06/09
  8. 8. Document Libre. www.allili.net <ul><li>Il ya trois formats fournis par le Framework. NET pour les objets qui peuvent être sérialisé. </li></ul>System.Runtime. Serialization.Formatters <ul><li>Sérialisation personnalisée : Et oui on peut le faire  </li></ul>05/06/09 Les formateurs du Framework .NET Formateur Binaire (Sérialisation Binaire) Formateur SOAP (Sérialisation SOAP) Formateur XML (Sérialisation XML) System.Runtime. Serialization.Formatters System.Xml.Serialization.XmlSerializer
  9. 9. Document Libre. www.allili.net <ul><li>Afin qu’une classe peux être sérialiser on doit placer l’attribut [Serilizable] en tête de la classe. </li></ul><ul><li>Cet Attribut concerne seulement une Sérialisation binaire. </li></ul><ul><li>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]. </li></ul><ul><li>[NonSerialized] indique qu’un attribut ne sera pas sérialiser. </li></ul><ul><li>La sérialisation d’une classe non précédée par [Serializable] déclenche une exception de type SerializationException </li></ul><ul><li>Exemple : </li></ul>[Serializable] public   class  Employee {     public   int  empCode;     public   string  empName; } 05/06/09
  10. 10. Document Libre. www.allili.net <ul><li>BinaryFormatter  : </li></ul><ul><li>Il y a émission d’octets en flux continu à partir d’un ou plusieurs objets. </li></ul><ul><li>La sérialisation binaire fournit un moyen de persister un objet de telle manière que l'objet peut être reconstruit automatiquement. </li></ul><ul><li>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. </li></ul><ul><li>Elle stocke tout l’état de l'objet, y compris le type d'information, d’une façon fidèle à l’origine. </li></ul><ul><li>Seules les applications qui ont accès à l’assembly qui contient le type de définition de l’objet peuvent le désérialiser. </li></ul><ul><li>Exemple : </li></ul>05/06/09
  11. 11. Document Libre. www.allili.net <ul><li>Sérialisation : </li></ul>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();    } } 05/06/09
  12. 12. Document Libre. www.allili.net <ul><li>Désérialisation : </li></ul>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();    } } 05/06/09
  13. 13. Document Libre. www.allili.net <ul><li>Démos : </li></ul><ul><ul><ul><ul><li>Serialisation_Binaire </li></ul></ul></ul></ul>05/06/09
  14. 14. Document Libre. www.allili.net <ul><li>SOAP est le protocole idéal pour la communication entre les applications qui utilise des architectures hétérogènes.(Web Services) </li></ul><ul><li>SoapFormatter  : </li></ul><ul><li>Emission d’un flux XML en utilisant les spécifications de SOAP. </li></ul><ul><li>La sérialisation binaire fournit un moyen de persister un objet de telle manière que l'objet peut être reconstruit automatiquement. </li></ul><ul><li>Le formateur SOAP stocke les mêmes informations que le formateur binaire, mais dans le format SOAP. </li></ul><ul><li>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.) </li></ul><ul><li>La Sérialisation SOAP est facilement transportée par réseau. </li></ul><ul><li>N.B : </li></ul><ul><li>Il faut importer manuellement la DLL : </li></ul><ul><li>System.Runtime.Serialization.Formatters.Soap.dll </li></ul>05/06/09
  15. 15. Document Libre. www.allili.net <ul><li>Exemple de Sérialisation : </li></ul><ul><li>Exemple de Désérialisation : </li></ul>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; } 05/06/09
  16. 16. Document Libre. www.allili.net <ul><li>Démos : </li></ul><ul><ul><ul><ul><li>Serialisation_SOAP </li></ul></ul></ul></ul>05/06/09
  17. 17. Document Libre. www.allili.net <ul><li>[NonSerialized] : Dans certaines situations, on ne veut pas sérialiser tout les attributs de la classe. </li></ul><ul><li>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]. </li></ul><ul><li>Héritage : l’attribut [Serialisable] n’est pas héréditaire. La classe fille doit être marquée par cet attribut. </li></ul><ul><li>Démos : </li></ul><ul><li>Controle_Serialisation </li></ul><ul><li>Serialisation_Binaire_Liste </li></ul><ul><li>Serialisation_Binaire_Heritage </li></ul>05/06/09
  18. 18. Document Libre. www.allili.net <ul><li>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. </li></ul><ul><li>Elle donne au programmeur une très large souplesse dans la personnalisation de la sortie. </li></ul><ul><li>On peut spécifier si un champ est un attribut ou un élément, déterminer l'espace de noms XML… </li></ul><ul><li>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. </li></ul><ul><li>La classe de base pour réaliser une sérialisation XML est : </li></ul><ul><li>System.Xml.Serialization.XmlSerializer </li></ul>05/06/09
  19. 19. Document Libre. www.allili.net <ul><li>La Sérialisation XML peut être contrôlé par des attributs : </li></ul><ul><li>XmlRoot : représente le nom de la racine du document XML de, donc ne vaut que pour une classe. </li></ul><ul><li>XmlAttribute : représente un attribut XML. </li></ul><ul><li>XmlElement : représente un élément XML. </li></ul><ul><li>XmlArray : représente un tableau XML. </li></ul><ul><li>XmlArrayItem : représente un élément du tableau XML. </li></ul><ul><li>… (tout ce qu’on peut mettre dans un documents XML  ) </li></ul><ul><li>Exemple : </li></ul>[XmlAttribute( &quot;empName&quot; )] public   string  EmpName {    get{ return  empName;}    set{empName  =  value;} } 05/06/09
  20. 20. Document Libre. www.allili.net <ul><li>Exemple de Sérialisation : </li></ul>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();    } } 05/06/09
  21. 21. Document Libre. www.allili.net <ul><li>Exemple de Désérialisation : </li></ul>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; } 05/06/09
  22. 22. Document Libre. www.allili.net <ul><li>Démos : </li></ul><ul><ul><ul><ul><li>Serialisation_XML_non_formate </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Serialisation_XML_formate </li></ul></ul></ul></ul><ul><ul><ul><ul><li>XML_Objet_Objet </li></ul></ul></ul></ul><ul><ul><ul><ul><li>XML_Liste </li></ul></ul></ul></ul>05/06/09
  23. 23. Document Libre. www.allili.net <ul><li>Dans certains cas la sérialisation classique n’est pas suffisante. </li></ul><ul><li>Ajout du traitement lors de la sérialisation. </li></ul><ul><li>Contrôle de la sérialisation. </li></ul><ul><li>La Sérialisation personnalisée, est réalisée en implémentant l’interface «  ISerializable  » </li></ul><ul><li>void ISerializable .GetObjectData( SerializationInfo info, StreamingContext context) </li></ul><ul><li>{ </li></ul><ul><ul><ul><li>... // La Sérialisation Personalisée </li></ul></ul></ul><ul><li>} </li></ul><ul><li>protected Object( SerializationInfo info, StreamingContext context) </li></ul><ul><li>{ </li></ul><ul><ul><ul><li>... // Constructeur pour la désérialisaton </li></ul></ul></ul><ul><li>} </li></ul>05/06/09
  24. 24. Document Libre. www.allili.net <ul><li>Démos : </li></ul><ul><ul><ul><ul><li>Serialisation_Personalise </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Serial_Perso_Collection </li></ul></ul></ul></ul>05/06/09
  25. 25. Mapping O/R
  26. 26. Document Libre. www.allili.net <ul><li>Base de données != Objets </li></ul><ul><ul><li>Base de données : </li></ul></ul><ul><ul><li>Tables, colonnes, type simples … </li></ul></ul><ul><ul><li>Clés : primaires, étrangères, index ... </li></ul></ul><ul><ul><li>Relations </li></ul></ul><ul><ul><li>Héritage </li></ul></ul><ul><ul><li>Objets : </li></ul></ul><ul><ul><li>Classe, champs, propriété. </li></ul></ul><ul><ul><li>Compositions (Type Complexe). </li></ul></ul><ul><ul><li>Relations </li></ul></ul><ul><ul><li>Héritage, Polymorphisme </li></ul></ul>05/06/09
  27. 27. Document Libre. www.allili.net <ul><li>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. </li></ul><ul><li>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). </li></ul><ul><li>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. </li></ul>05/06/09 Base de données Mapping O.R Objets
  28. 28. Document Libre. www.allili.net <ul><li>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. </li></ul><ul><li>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. </li></ul><ul><li>Il existe plusieurs types de logiciels de Mapping Objet / Relationnel : </li></ul><ul><ul><li>Purement Relationnel: Pas de MOR; utilise des tables et des lignes. </li></ul></ul><ul><ul><li>Mapping Objet Faible: des lignes de tables sont manuellement converties en objets. </li></ul></ul><ul><ul><li>Mapping Objet Intermédiaire: L'application est conçus avec des objets. Les associations et collections peuvent être mappées. </li></ul></ul><ul><ul><li>Mapping Objet Total: Solution plus avancée que le Mapping Objet Intermédiaire; elle permet des liaisons complexes </li></ul></ul><ul><li>.Net est compatible avec plusieurs Logiciels Mapping OR: </li></ul><ul><li>ADO.NET, Opf3, Evaluant DTM, ObjectSpace, Nhibernate … </li></ul>05/06/09
  29. 29. Document Libre. www.allili.net <ul><li>NHibernate est le portage de l'excellent  Hibernate, outil de persistance relationnel vers la plate-forme .NET </li></ul><ul><li>Une solution dominante pour le mapping objet / relationnel (MOR) et la persistance d'objets. </li></ul><ul><li>Nhibernate est flexible : on peut définir comment persister chaque propriété et relation. </li></ul><ul><li>Nhibernate permet d’effectuer des requêtes en utilisant un langage de requête très concis et puissant. </li></ul><ul><li>NHibernate utilise l'API. NET, et ne génère pas de code supplémentaire ou du Bytecode. </li></ul><ul><li>Nhibernate est Open Source (Sous licence LGPL). </li></ul><ul><li>Nhibernate est indépendant des SGBD. </li></ul><ul><li>Pour utiliser Nhibernate dans un projet .Net il faut importer les DLL : </li></ul><ul><ul><li>NHibernate.dll </li></ul></ul><ul><ul><li>log4net.dll </li></ul></ul><ul><ul><li>NHibernate.Mapping.Attributes.dl </li></ul></ul>05/06/09
  30. 30. Document Libre. www.allili.net <ul><li>Nhibernate ajoute une couche de persistance entre la couche d’accès au donnée set l’application. </li></ul>05/06/09
  31. 31. Document Libre. www.allili.net 05/06/09
  32. 32. Document Libre. www.allili.net <ul><li>Le fichier de configuration doit être chargé avec l'objet Configuration </li></ul><ul><li>L'assembly qui contient toute la couche métier doit être chargée avec </li></ul><ul><li>l'instance de Configuration déjà crée. </li></ul><ul><li>L’instanciation d’un objet factory avec l’objet de configuration. </li></ul><ul><li>A chaque fois qu'il est nécessaire de faire un traitement sur la base </li></ul><ul><li>de données, il est nécessaire de créer une nouvelle session avec </li></ul><ul><li>L’objet factory. </li></ul><ul><li>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. </li></ul><ul><li>A la fin de la session (lorsque les données sont traitées), l faut fermer la session. (également faire un commit la transaction) </li></ul><ul><li>A la fermeture du programme, on ferme la factory (ce qui ferme proprement la connexion à la base de données) </li></ul>05/06/09
  33. 33. Document Libre. www.allili.net <ul><li>En général le fichier de configuration est nommé &quot;App.config&quot; pour une application windows, ou &quot;Web.config&quot; pour une application Web (en ASP.NET), est située à la racine du projet qui contient l‘executable. </li></ul><ul><li>ce n'est pas un fichier NHibernate proprement dit. </li></ul>05/06/09 <ul><li><?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> </li></ul><ul><li><configuration> </li></ul><ul><ul><li><configSections> </li></ul></ul><ul><li>… </li></ul><ul><ul><li></configSections> </li></ul></ul><ul><ul><li><nhibernate> </li></ul></ul><ul><ul><ul><li>… </li></ul></ul></ul><ul><ul><li></nhibernate> </li></ul></ul><ul><li></configuration> </li></ul>
  34. 34. Document Libre. www.allili.net 05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <configuration> <configSections> <section name=&quot;nhibernate&quot; type=&quot;System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&quot;/> </configSections> <nhibernate> <add key=&quot;hibernate.connection.provider&quot; value=&quot;NHibernate.Connection.DriverConnectionProvider&quot;/> <add key=&quot;hibernate.dialect&quot; value=&quot;NHibernate.Dialect.MsSql2000Dialect&quot;/> <add key=&quot;hibernate.connection.driver_class&quot; value=&quot;NHibernate.Driver.SqlClientDriver&quot;/> <add key=&quot;hibernate.connection.connection_string&quot; value=&quot;Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI&quot;/> </nhibernate> </configuration>
  35. 35. Document Libre. www.allili.net 05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <configuration> <configSections> <section name=&quot;nhibernate&quot; type=&quot;System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&quot;/> </configSections> <nhibernate> <add key=&quot;hibernate.connection.provider&quot; value=&quot;NHibernate.Connection.DriverConnectionProvider&quot;/> <add key=&quot;hibernate.dialect&quot; value=&quot;NHibernate.Dialect.MsSql2000Dialect&quot;/> <add key=&quot;hibernate.connection.driver_class&quot; value=&quot;NHibernate.Driver.SqlClientDriver&quot;/> <add key=&quot;hibernate.connection.connection_string&quot; value=&quot;Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI&quot;/> </nhibernate> </configuration> Déclaration de la section NHibernate qui va suivre
  36. 36. Document Libre. www.allili.net 05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <configuration> <configSections> <section name=&quot;nhibernate&quot; type=&quot;System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&quot;/> </configSections> <nhibernate> <add key=&quot;hibernate.connection.provider&quot; value=&quot;NHibernate.Connection.DriverConnectionProvider&quot;/> <add key=&quot;hibernate.dialect&quot; value=&quot;NHibernate.Dialect.MsSql2000Dialect&quot;/> <add key=&quot;hibernate.connection.driver_class&quot; value=&quot;NHibernate.Driver.SqlClientDriver&quot;/> <add key=&quot;hibernate.connection.connection_string&quot; value=&quot;Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI&quot;/> </nhibernate> </configuration> Début de la section NHibernate pour le fichier de configuration 4 clefs sont importantes
  37. 37. Document Libre. www.allili.net 05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <configuration> <configSections> <section name=&quot;nhibernate&quot; type=&quot;System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&quot;/> </configSections> <nhibernate> <add key=&quot;hibernate.connection.provider&quot; value=&quot;NHibernate.Connection.DriverConnectionProvider&quot;/> <add key=&quot;hibernate.dialect&quot; value=&quot;NHibernate.Dialect.MsSql2000Dialect&quot;/> <add key=&quot;hibernate.connection.driver_class&quot; value=&quot;NHibernate.Driver.SqlClientDriver&quot;/> <add key=&quot;hibernate.connection.connection_string&quot; value=&quot;Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI&quot;/> </nhibernate> </configuration> La première est liée à la méthode utilisée par NHibernate pour se connecter
  38. 38. Document Libre. www.allili.net 05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <configuration> <configSections> <section name=&quot;nhibernate&quot; type=&quot;System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&quot;/> </configSections> <nhibernate> <add key=&quot;hibernate.connection.provider&quot; value=&quot;NHibernate.Connection.DriverConnectionProvider&quot;/> <add key=&quot;hibernate.dialect&quot; value=&quot;NHibernate.Dialect.MsSql2000Dialect&quot;/> <add key=&quot;hibernate.connection.driver_class&quot; value=&quot;NHibernate.Driver.SqlClientDriver&quot;/> <add key=&quot;hibernate.connection.connection_string&quot; value=&quot;Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI&quot;/> </nhibernate> </configuration> La seconde clef est liée au dialecte (Langage SQL)
  39. 39. Document Libre. www.allili.net 05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <configuration> <configSections> <section name=&quot;nhibernate&quot; type=&quot;System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&quot;/> </configSections> <nhibernate> <add key=&quot;hibernate.connection.provider&quot; value=&quot;NHibernate.Connection.DriverConnectionProvider&quot;/> <add key=&quot;hibernate.dialect&quot; value=&quot;NHibernate.Dialect.MsSql2000Dialect&quot;/> <add key=&quot;hibernate.connection.driver_class&quot; value=&quot;NHibernate.Driver.SqlClientDriver&quot;/> <add key=&quot;hibernate.connection.connection_string&quot; value=&quot;Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI&quot;/> </nhibernate> </configuration> La troisième clef est liée au driver utilisé par NHibernate pour communiquer avec la base de données
  40. 40. Document Libre. www.allili.net 05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <configuration> <configSections> <section name=&quot;nhibernate&quot; type=&quot;System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&quot;/> </configSections> <nhibernate> <add key=&quot;hibernate.connection.provider&quot; value=&quot;NHibernate.Connection.DriverConnectionProvider&quot;/> <add key=&quot;hibernate.dialect&quot; value=&quot;NHibernate.Dialect.MsSql2000Dialect&quot;/> <add key=&quot;hibernate.connection.driver_class&quot; value=&quot;NHibernate.Driver.SqlClientDriver&quot;/> <add key=&quot;hibernate.connection.connection_string&quot; value=&quot;Data Source=root;Initial Catalog=mapping;Integrated Security=SSPI&quot;/> </nhibernate> </configuration> Une dernière clef est liée à la chaîne de connexion
  41. 41. Document Libre. www.allili.net <ul><li>Le fichier de configuration permet au Nhibernate de communiquer avec la base de données. </li></ul><ul><li>Après la création du fichier de configuration il faut initialiser Nhibernate. </li></ul>05/06/09 Configuration cfg = new Configuration();      cfg.AddAssembly(“Mon_Assembly&quot;);       ISessionFactory factory = cfg.BuildSessionFactory();      session = factory.OpenSession();      ITransaction t = session.BeginTransaction(); … …  …       t.Commit();       session.Flush();       session.Close();        factory.Close();
  42. 42. Document Libre. www.allili.net <ul><li>Le fichier de configuration permet au Nhibernate de communiquer avec la base de données. </li></ul><ul><li>Après la création du fichier de configuration il faut initialiser Nhibernate. </li></ul>05/06/09 Configuration cfg = new Configuration();      cfg.AddAssembly(“Mon_Assembly&quot;);       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
  43. 43. Document Libre. www.allili.net <ul><li>Le fichier de configuration permet au Nhibernate de communiquer avec la base de données. </li></ul><ul><li>Après la création du fichier de configuration il faut initialiser Nhibernate. </li></ul>05/06/09 Configuration cfg = new Configuration();      cfg.AddAssembly(“Mon_Assembly&quot;);       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
  44. 44. Document Libre. www.allili.net <ul><li>Le fichier de configuration permet au Nhibernate de communiquer avec la base de données. </li></ul><ul><li>Après la création du fichier de configuration il faut initialiser Nhibernate. </li></ul>05/06/09 Configuration cfg = new Configuration();      cfg.AddAssembly(“Mon_Assembly&quot;);       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
  45. 45. Document Libre. www.allili.net <ul><li>Le fichier de configuration permet au Nhibernate de communiquer avec la base de données. </li></ul><ul><li>Après la création du fichier de configuration il faut initialiser Nhibernate. </li></ul>05/06/09 Configuration cfg = new Configuration();      cfg.AddAssembly(“Mon_Assembly&quot;);       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
  46. 46. Document Libre. www.allili.net <ul><li>Le fichier de configuration permet au Nhibernate de communiquer avec la base de données. </li></ul><ul><li>Après la création du fichier de configuration il faut initialiser Nhibernate. </li></ul>05/06/09 Configuration cfg = new Configuration();      cfg.AddAssembly(“Mon_Assembly&quot;);       ISessionFactory factory = cfg.BuildSessionFactory();      session = factory.OpenSession();      ITransaction t = session.BeginTransaction(); … …  …       t.Commit();       session.Flush();       session.Close();        factory.Close(); Création d’une transaction
  47. 47. Document Libre. www.allili.net <ul><li>La classe persistante doit implémenter son constructeur par défaut explicitement. </li></ul><ul><li>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). </li></ul><ul><li>Il est préférable de persistés des classe non-sealed, et d’indiquer le mot « virtual » pour les méthodes. </li></ul>05/06/09 class Personne { private int id; private string nom; public virtual int Id { get { return id; } set { id = value; } }
  48. 48. Document Libre. www.allili.net <ul><li>La classe persistante doit implémenter son constructeur par défaut explicitement. </li></ul><ul><li>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). </li></ul><ul><li>Il est préférable de persistés des classe non-sealed, et d’indiquer le mot « virtual » pour les méthodes. </li></ul>05/06/09 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
  49. 49. Document Libre. www.allili.net <ul><li>La déclaration du mapping d’une classe vers une table, est effectuer via un fichier XML. </li></ul><ul><li>Il s’agit d’un fichier XML dont le nom est de la forme : Nom_classe.hbm.xml </li></ul><ul><li>Le &quot;hbm&quot; dans le nom de fichier est très important, puisque c'est grâce à lui, NHibernate le détecte comme un fichier de mapping. </li></ul>05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <hibernate-mapping xmlns=&quot;urn:nhibernate-mapping-2.2&quot; namespace=&quot;Mapping_Personne&quot;> <class name=&quot;Mapping_Personne.Personne&quot; table=&quot;personne&quot;> <id name=&quot;Id&quot; column=&quot;id&quot; type=&quot;Int32&quot;> <generator class=&quot;native&quot;/> </id> <property name=&quot;Nom&quot; column=&quot;nom&quot; type=&quot;String&quot; not-null=&quot;true&quot; /> <property name=&quot;Prenom&quot; column=&quot;prenom&quot; type=&quot;String&quot; not-null=&quot;true&quot; /> </class> </hibernate-mapping>
  50. 50. Document Libre. www.allili.net <ul><li>La déclaration du mapping d’une classe vers une table, est effectuer via un fichier XML. </li></ul><ul><li>Il s’agit d’un fichier XML dont le nom est de la forme : Nom_classe.hbm.xml </li></ul><ul><li>Le &quot;hbm&quot; dans le nom de fichier est très important, puisque c'est grâce à lui, NHibernate le détecte comme un fichier de mapping. </li></ul>05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <hibernate-mapping xmlns=&quot;urn:nhibernate-mapping-2.2&quot; namespace=&quot;Mapping_Personne&quot;> <class name=&quot;Mapping_Personne.Personne&quot; table=&quot;personne&quot;> <id name=&quot;Id&quot; column=&quot;id&quot; type=&quot;Int32&quot;> <generator class=&quot;native&quot;/> </id> <property name=&quot;Nom&quot; column=&quot;nom&quot; type=&quot;String&quot; not-null=&quot;true&quot; /> <property name=&quot;Prenom&quot; column=&quot;prenom&quot; type=&quot;String&quot; not-null=&quot;true&quot; /> </class> </hibernate-mapping> Déclaration du fichier de mapping
  51. 51. Document Libre. www.allili.net <ul><li>La déclaration du mapping d’une classe vers une table, est effectuer via un fichier XML. </li></ul><ul><li>Il s’agit d’un fichier XML dont le nom est de la forme : Nom_classe.hbm.xml </li></ul><ul><li>Le &quot;hbm&quot; dans le nom de fichier est très important, puisque c'est grâce à lui, NHibernate le détecte comme un fichier de mapping. </li></ul>05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <hibernate-mapping xmlns=&quot;urn:nhibernate-mapping-2.2&quot; namespace=&quot;Mapping_Personne&quot;> <class name=&quot;Mapping_Personne.Personne&quot; table=&quot;personne&quot;> <id name=&quot;Id&quot; column=&quot;id&quot; type=&quot;Int32&quot;> <generator class=&quot;native&quot;/> </id> <property name=&quot;Nom&quot; column=&quot;nom&quot; type=&quot;String&quot; not-null=&quot;true&quot; /> <property name=&quot;Prenom&quot; column=&quot;prenom&quot; type=&quot;String&quot; not-null=&quot;true&quot; /> </class> </hibernate-mapping> Définit le nom de la classe et le nom de la table dans laquelle la classe est persistée
  52. 52. Document Libre. www.allili.net <ul><li>La déclaration du mapping d’une classe vers une table, est effectuer via un fichier XML. </li></ul><ul><li>Il s’agit d’un fichier XML dont le nom est de la forme : Nom_classe.hbm.xml </li></ul><ul><li>Le &quot;hbm&quot; dans le nom de fichier est très important, puisque c'est grâce à lui, NHibernate le détecte comme un fichier de mapping. </li></ul>05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <hibernate-mapping xmlns=&quot;urn:nhibernate-mapping-2.2&quot; namespace=&quot;Mapping_Personne&quot;> <class name=&quot;Mapping_Personne.Personne&quot; table=&quot;personne&quot;> <id name=&quot;Id&quot; column=&quot;id&quot; type=&quot;Int32&quot;> <generator class=&quot;identity&quot;/> </id> <property name=&quot;Nom&quot; column=&quot;nom&quot; type=&quot;String&quot; not-null=&quot;true&quot; /> <property name=&quot;Prenom&quot; column=&quot;prenom&quot; type=&quot;String&quot; not-null=&quot;true&quot; /> </class> </hibernate-mapping> Mappe la clef primaire de la table à un membre de la classe.
  53. 53. Document Libre. www.allili.net <ul><li>La déclaration du mapping d’une classe vers une table, est effectuer via un fichier XML. </li></ul><ul><li>Il s’agit d’un fichier XML dont le nom est de la forme : Nom_classe.hbm.xml </li></ul><ul><li>Le &quot;hbm&quot; dans le nom de fichier est très important, puisque c'est grâce à lui, NHibernate le détecte comme un fichier de mapping. </li></ul>05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <hibernate-mapping xmlns=&quot;urn:nhibernate-mapping-2.2&quot; namespace=&quot;Mapping_Personne&quot;> <class name=&quot;Mapping_Personne.Personne&quot; table=&quot;personne&quot;> <id name=&quot;Id&quot; column=&quot;id&quot; type=&quot;Int32&quot;> <generator class=&quot;identity&quot;/> </id> <property name=&quot;Nom&quot; column=&quot;nom&quot; type=&quot;String&quot; not-null=&quot;true&quot; /> <property name=&quot;Prenom&quot; column=&quot;prenom&quot; type=&quot;String&quot; not-null=&quot;true&quot; /> </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
  54. 54. Document Libre. www.allili.net <ul><li>La déclaration du mapping d’une classe vers une table, est effectuer via un fichier XML. </li></ul><ul><li>Il s’agit d’un fichier XML dont le nom est de la forme : Nom_classe.hbm.xml </li></ul><ul><li>Le &quot;hbm&quot; dans le nom de fichier est très important, puisque c'est grâce à lui, NHibernate le détecte comme un fichier de mapping. </li></ul>05/06/09 <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <hibernate-mapping xmlns=&quot;urn:nhibernate-mapping-2.2&quot; namespace=&quot;Mapping_Personne&quot;> <class name=&quot;Mapping_Personne.Personne&quot; table=&quot;personne&quot;> <id name=&quot;Id&quot; column=&quot;id&quot; type=&quot;Int32&quot;> <generator class=&quot;identity&quot;/> </id> <property name=&quot;Nom&quot; column=&quot;nom&quot; type=&quot;String&quot; not-null=&quot;true&quot; /> <property name=&quot;Prenom&quot; column=&quot;prenom&quot; type=&quot;String&quot; not-null=&quot;true&quot; /> </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
  55. 55. Document Libre. www.allili.net <ul><li>Il y a trois façons de construire des requêtes avec Nhibernate : </li></ul><ul><ul><li>Requête SQL native : </li></ul></ul><ul><ul><ul><li>utiliser une requête directement dans le dialecte de la BDD sous jacente va engendrer une perte de portabilité. </li></ul></ul></ul><ul><ul><ul><li>Il vaut mieux l’éviter. </li></ul></ul></ul><ul><ul><li>Requête HQL (Hibernate Query Languge) : </li></ul></ul><ul><ul><ul><li>Ressemble beaucoup à du SQL. </li></ul></ul></ul><ul><ul><ul><li>Manipule directement des objets au lieu de tables </li></ul></ul></ul><ul><ul><ul><li>Ces Requêtes sont indépendantes des SGBD. </li></ul></ul></ul><ul><li>Requêtes Criteria : </li></ul><ul><ul><ul><li>Ces requêtes sont construites avec les Factory. </li></ul></ul></ul><ul><ul><ul><li>Ils sont orientées objets, et indépendantes des SGBD. </li></ul></ul></ul>05/06/09
  56. 56. Document Libre. www.allili.net <ul><li>Requêtes SQL native : </li></ul><ul><li>Le résultat une IList qui contient les éléments conformes aux critères. </li></ul>05/06/09 <ul><ul><li>Configuration cfg = new Configuration(); </li></ul></ul><ul><ul><li>cfg.AddAssembly(“Mon_Assembly&quot;); </li></ul></ul><ul><ul><li>ISessionFactory factory = cfg.BuildSessionFactory(); </li></ul></ul><ul><ul><li>session = factory.OpenSession(); </li></ul></ul><ul><ul><li>IList listepres = session.CreateSQLQuery(&quot;select * from personne&quot;, &quot;Personne&quot;, typeof(Personne)).List(); </li></ul></ul><ul><ul><li>foreach (Personne pers in listepers) </li></ul></ul><ul><ul><ul><li>Console.WriteLine(pers.Id+” “+pers.Nom+” “+pers.Prenom); </li></ul></ul></ul><ul><ul><li>session.Close(); </li></ul></ul><ul><ul><li>factory.Close(); </li></ul></ul>
  57. 57. Document Libre. www.allili.net <ul><li>Requêtes HQL : </li></ul><ul><li>Le résultat une IList qui contient les éléments conformes aux critères. </li></ul>05/06/09 <ul><ul><li>Configuration cfg = new Configuration(); </li></ul></ul><ul><ul><li>cfg.AddAssembly(“Mon_Assembly&quot;); </li></ul></ul><ul><ul><li>ISessionFactory factory = cfg.BuildSessionFactory(); </li></ul></ul><ul><ul><li>session = factory.OpenSession(); </li></ul></ul><ul><ul><li>IList listepers = session.CreateQuery(&quot;from Personne&quot;).List(); </li></ul></ul><ul><ul><li>foreach (Personne pers in listepers) </li></ul></ul><ul><ul><ul><li>Console.WriteLine(pers.Id+” “+pers.Nom+” “+pers.Prenom); </li></ul></ul></ul><ul><ul><li>session.Close(); </li></ul></ul><ul><ul><li>factory.Close(); </li></ul></ul>
  58. 58. Document Libre. www.allili.net <ul><li>Requêtes Criteria : </li></ul><ul><li>Le résultat est un ICriteria qui contient comme attributs une liste des éléments conformes aux critères. </li></ul>05/06/09 <ul><ul><li>Configuration cfg = new Configuration(); </li></ul></ul><ul><ul><li>cfg.AddAssembly(“Mon_Assembly&quot;); </li></ul></ul><ul><ul><li>ISessionFactory factory = cfg.BuildSessionFactory(); </li></ul></ul><ul><ul><li>session = factory.OpenSession(); </li></ul></ul><ul><ul><li>ICriteria c = session.CreateCriteria(typeof(Personne)) </li></ul></ul><ul><ul><ul><ul><ul><li>. Add(Expression.Eq(“Nom&quot;, “root@khalid&quot;)); </li></ul></ul></ul></ul></ul><ul><ul><li>foreach (Personne pers in c.List() ) </li></ul></ul><ul><ul><ul><li>Console.WriteLine(pers.Id+” “+pers.Nom+” “+pers.Prenom); </li></ul></ul></ul><ul><ul><li>session.Close(); </li></ul></ul><ul><ul><li>factory.Close(); </li></ul></ul>
  59. 59. Document Libre. www.allili.net <ul><li>La méthode load de ISession : </li></ul><ul><ul><li>Si on connaît l’identifiant, on peu utiliser la méthode load de l’instance ISession. </li></ul></ul><ul><ul><li>Le résultat est une instance de la classe persistante. </li></ul></ul>05/06/09 <ul><ul><ul><li>Configuration cfg = new Configuration(); </li></ul></ul></ul><ul><ul><ul><li>cfg.AddAssembly(“Mon_Assembly&quot;); </li></ul></ul></ul><ul><ul><ul><li>ISessionFactory factory = cfg.BuildSessionFactory(); </li></ul></ul></ul><ul><ul><ul><li>session = factory.OpenSession(); </li></ul></ul></ul><ul><ul><li>Console.Write(&quot;Entrer le id : &quot;); </li></ul></ul><ul><ul><li>int id = Convert.ToInt32(Console.ReadLine()); </li></ul></ul><ul><ul><li>Personne pers = new Personne(); </li></ul></ul><ul><ul><li>session.Load(pers, id); </li></ul></ul><ul><ul><li>Console.WriteLine(pers.Nom+ &quot; &quot; + pers.Prenom); </li></ul></ul><ul><ul><li>session.Close(); </li></ul></ul><ul><ul><li>factory.Close(); </li></ul></ul>
  60. 60. Document Libre. www.allili.net 05/06/09 <ul><li>Insertion : </li></ul><ul><ul><ul><li>Configuration cfg = new Configuration(); </li></ul></ul></ul><ul><ul><ul><li>cfg.AddAssembly(“Mon_Assembly&quot;); </li></ul></ul></ul><ul><ul><ul><li>ISessionFactory factory = cfg.BuildSessionFactory(); </li></ul></ul></ul><ul><ul><ul><li>session = factory.OpenSession(); </li></ul></ul></ul><ul><ul><ul><li>ITransaction tr = session.BeginTransaction(); </li></ul></ul></ul><ul><ul><li>Console.Write(&quot;Entrer le id : &quot;); </li></ul></ul><ul><ul><li>int id = Convert.ToInt32(Console.ReadLine()); </li></ul></ul><ul><ul><li>Console.Write(&quot;Entrer le nom : &quot;); </li></ul></ul><ul><ul><li>String nom=Console.ReadLine(); </li></ul></ul><ul><ul><li>Personne pers = new Personne(id, nom); </li></ul></ul><ul><ul><li>session.save(pers, id); </li></ul></ul><ul><ul><li>tr.commit(); </li></ul></ul><ul><ul><li>session.Close(); </li></ul></ul><ul><ul><li>factory.Close(); </li></ul></ul>
  61. 61. Document Libre. www.allili.net 05/06/09 <ul><li>Modification : </li></ul><ul><ul><ul><li>Configuration cfg = new Configuration(); </li></ul></ul></ul><ul><ul><ul><li>cfg.AddAssembly(“Mon_Assembly&quot;); </li></ul></ul></ul><ul><ul><ul><li>ISessionFactory factory = cfg.BuildSessionFactory(); </li></ul></ul></ul><ul><ul><ul><li>session = factory.OpenSession(); </li></ul></ul></ul><ul><ul><ul><li>ITransaction tr = session.BeginTransaction(); </li></ul></ul></ul><ul><ul><li>Console.Write(&quot;Entrer le id à modifier: &quot;); </li></ul></ul><ul><ul><li>int id = Convert.ToInt32(Console.ReadLine()); </li></ul></ul><ul><ul><li>Console.Write(&quot;Entrer le nouveau nom : &quot;); </li></ul></ul><ul><ul><li>String nom=Console.ReadLine(); </li></ul></ul><ul><ul><li>Personne pers = new Personne(id, nom); </li></ul></ul><ul><ul><li>session.save(pers); </li></ul></ul><ul><ul><li>tr.commit(); </li></ul></ul><ul><ul><li>session.Close(); </li></ul></ul><ul><ul><li>factory.Close(); </li></ul></ul>
  62. 62. Document Libre. 05/06/09 <ul><li>Suppression : </li></ul><ul><ul><ul><li>Configuration cfg = new Configuration(); </li></ul></ul></ul><ul><ul><ul><li>cfg.AddAssembly(“Mon_Assembly&quot;); </li></ul></ul></ul><ul><ul><ul><li>ISessionFactory factory = cfg.BuildSessionFactory(); </li></ul></ul></ul><ul><ul><ul><li>session = factory.OpenSession(); </li></ul></ul></ul><ul><ul><ul><li>ITransaction tr = session.BeginTransaction(); </li></ul></ul></ul><ul><ul><li>Console.Write(&quot;Entrer le id à supprimer : &quot;); </li></ul></ul><ul><ul><li>int id = Convert.ToInt32(Console.ReadLine()); </li></ul></ul><ul><ul><li>Console.Write(&quot;Entrer le nom : &quot;); </li></ul></ul><ul><ul><li>String nom=Console.ReadLine(); </li></ul></ul><ul><ul><li>Personne pers = new Personne(id, nom); </li></ul></ul><ul><ul><li>session.delete(pers); </li></ul></ul><ul><ul><li>tr.commit(); </li></ul></ul><ul><ul><li>session.Close(); </li></ul></ul><ul><ul><li>factory.Close(); </li></ul></ul>
  63. 63. Document Libre. www.allili.net <ul><li>Démos : </li></ul><ul><ul><ul><ul><li>Mapping_Personne </li></ul></ul></ul></ul>05/06/09

×