Ado.net vs jpa

45

Click here to load reader

Transcript of Ado.net vs jpa

Page 1: Ado.net vs jpa

ADO.NET et JPA

Page 2: Ado.net vs jpa

Chapitre I

LA PERSISTANCE DES OBJETS1-introduction

2 -le mapping O/R (objet/relationnel)3-l’architecture

JAVA…..ADO.NET4-la persistance de données

JAVA…..ADO.NET

Page 3: Ado.net vs jpa

Chapitre I

LA PERSISTANCE DES OBJETS

1-introduction plusieurs types de base de données:

Dl1,IMS: Hiérarchique Mysql: Relationnelle (RDBMS /

SGBDR) Objet (ODBMS / SGBDO): db4objects

Xindice: XML (XDBMS) La seconde catégorie est historiquement

la plus répandue mais aussi une des moins compatible avec la programmation orienté

objet .

Page 4: Ado.net vs jpa

Chapitre I

LA PERSISTANCE DES OBJETS2-LE MAPPING O/R (objet/relationnel)

• Assurer le mapping des tables avec les classes • mettre en oeuvre des actions de type CRUD • Eventuellement permettre l'héritage des mappings

•Proposer un langage de requêtes indépendant de la base de données cible et assurer une traduction en SQL natif

• Supporter différentes formes d'identifiants générés automatiquement par les bases de données (identity, sequence, ...)

• Proposer un support des transactions •Assurer une gestion des accès concurrents (verrou, dead lock, ...)

Page 5: Ado.net vs jpa

Chapitre I

LA PERSISTANCE DES OBJETS

MAPPING OBJET RELATIONNEL (JPA):

Page 6: Ado.net vs jpa

Chapitre I

LA PERSISTANCE DES OBJETS3-L’ARCHITECTURE :31-l’architecture en java :Dans une architecture en couche: prévoir une couche dédiée aux accès aux données.La couche de persistence un niveau d'abstraction entre la base de données et l'utilisation qui en est faite. simplifier la couche métier qui utilise les traitements de cette couche masquer les traitements réalisés pour mapper les objets dans la base de données et vice et versa la couche métier ne contient aucune requête SQL, ni code de connexion ou d'accès à la base de données. La couche métier utilise les classes de la couche métier qui encapsulent ces traitements. Ainsi la couche métier manipule uniquement des objets pour les accès à la base de données.

Page 7: Ado.net vs jpa

LA PERSISTANCE DES OBJETS32- l’architecture ado.net :

Deux composants d'ADO.NET permettent d'accéder à des données et de les manipuler :Fournisseurs de données .NET FrameworkObjet DataSetLes Fournisseurs de données .NET Framework :L'objet Connection assure la connectivité avec une source de données. L'objet Command permet l'accès aux commandes de base de données pour retourner des données, modifier des données,. Le DataReader fournit un flux très performant de données en provenance de la source de données. Enfin, l'objet DataAdapter établit une passerelle entre l'objet DataSet et la source de données. Le DataAdapter utilise les objets Command pour exécuter des commandes SQL au niveau de la source de données afin d'une part de charger le DataSet de données, et d'autre part de répercuter dans la source de données les modifications apportées aux données contenues dans le DataSet.Le Dataset ADO.NET est explicitement conçu pour un accès aux données indépendant de toute source de données. Il peut donc être utilisé avec plusieurs sources de données différentes, utilisé avec des données XML ou utilisé pour gérer des données locales de l'application..

Page 8: Ado.net vs jpa

LA PERSISTANCE DES OBJETS

Page 9: Ado.net vs jpa

LA PERSISTANCE DES OBJETS4-LA PERSISTANCE DE DONNEES

41-la persistence de données en java:

JDBC : est l'acronyme de Java DataBase Connectivity. C'est l'API standard pour permettre un accès à une base de données JDO: est l'acronyme de Java Data Object : le but de cet API est de rendre transparent la persistance d'un objet. Il repose sur l'enrichissement de byte-code à la compilation.

JAVA PERSISTANCE API ET EJB3.0:

JPA (Java Persistence API) :C'est une synthèse standardisée des meilleurs outils du sujet (Hibernate, Toplink, ...)

L'API repose sur• l'utilisation d'entités persistantes sous la forme de POJOs • un gestionnaire de persistance (EntityManager) qui assure la gestion des entités persistantes • l'utilisation d'annotations •la configuration via des fichiers xml

JPA peut être utilisé avec Java EE dans un serveur d'application mais aussi avec Java SE

Page 10: Ado.net vs jpa

LA PERSISTANCE DES OBJETS42-la persistance de données-ADO.NET : 421- La persistance manuelle (ADO.NET, DataSet, …)  422- La persistance automatique:La persistance automatique est à l’essence du mapping objet/relationnelle. Cette approche consiste à prendre en charge le cycle de vie d’une entité de manière dynamique .L’utilisateur ne se préoccupe à aucun moment de l’état de son entité.La persistance automatique fournit les services suivants :- recherche, sauvegarde, mise à jour- concurrence- cache de 1er niveau et second niveau- navigation- chargement à la demande- transactions (éventuellement)

Page 11: Ado.net vs jpa

Chapitre II:JAVA PERSISTANCE API 1- introduction 2- les entites le mapping entre le bean entite et la table le mapping de propriete complexe le mapping d’une entite sur plusieurs tables l’utilisation d’objets embarques dans les entites 3- le fichier de configuration du mapping

4-L’UTILISATION DE BEAN ENTITE

l’entity manager l’obtention d’une instance de la classe EntityManager l’utilisation de la classe EntityManager  5- le fichier persistence.xml

Page 12: Ado.net vs jpa

CHAPITRE II

Java persistance API1-INTRODUCTION

L'API Java Persistence repose sur des entités qui sont de simples POJOs annotés et sur un gestionnaire de ces entités (EntityManager) qui propose des fonctionnalités pour les manipuler (ajout, modification suppression, recherche). Ce gestionnaire est responsable de la gestion de l'état des entités et de leur persistance dans la base de données. 

Page 13: Ado.net vs jpa

CHAPITRE II

Java persistance API2-LES ENTITES

Un objet Java de type POJO mappé vers une table de la base de données grâce à des méta data via l'API Java Persistence est nommé bean entité (Entity bean).

la classe du bean doit obligatoirement: être marquée avec l'annotation @javax.persistence.Entity Posséder une propriété déclarer comme clé primaire avec l'annotation @Id Le bean entity est composé de propriétés qui seront mappés sur les champs de la table de la base de données sous jacente. Chaque propriété encapsule les données d'un champ d'une table. Ces propriétés sont utilisables au travers de simple accesseurs (getter/setter).

Page 14: Ado.net vs jpa

CHAPITRE II

Java persistance API 21-le mapping entre le bean entité et la table

La description du mapping entre le bean entité et la table peut être fait de deux façons : -Utiliser des annotations -Utiliser un fichier XML de mapping L'API propose plusieurs annotations pour supporter un mapping O/R assez complet.

@javax.persistence.TablePréciser le nom de la table concernée par le mapping @javax.persistence.ColumnAssocié à un getter, il permet d'associer un champ de la table à la propriété @javax.persistence.IdAssocié à un getter, il permet d'associer un champ de la table à la propriété en tant que clé primaire @javax.persistence.GeneratedValueDemander la génération automatique de  la clé primaire au besoin

Page 15: Ado.net vs jpa

CHAPITRE II

Java persistance API22-le mapping de proprieté complexe

L'API Java persistence permet de mapper des colonnes qui concernent des données de type plus complexe que les types de base tel que les champs blob ou clob ou des objets.L'annotation @javax.persistence.Lob permet mapper une propriété sur une colonne de type Blob ou Clob selon le type de la propriété : Blob pour les tableaux de byte ou Byte ou les objets sérializables Clob pour les chaînes de caractères et les tableaux de caractères char ou Char L'annotation  @javax.persistence.Enumerated permet d'associer une propriété de type énumération à une colonne de la table sous la forme d'un numérique ou d'une chaîne de caractères.

Page 16: Ado.net vs jpa

CHAPITRE II

Java persistance API23-le mapping d’une entité sur plusieurs tablesLe modèle objet et le modèle relationnel correspondant ne correspondent pas toujours car les critères de conception ne sont pas forcement les même. Ainsi, il est courant d'avoir une entité qui mappe des colonnes de plusieurs tables.L'annotation @javax.persistence.SecondaryTable permet de préciser qu'une autre table sera utilisée dans le mapping.L'annotation @PrimaryKeyJoinColumn permet de préciser une colonne qui compose la clé primaire de la seconde table et entre dans la jointure avec la première table.

Page 17: Ado.net vs jpa

CHAPITRE II

Java persistance API24-l’utilisation d’objets embarqué dans les entités L'API Java Persistence permet d'utiliser dans les entités des objets Java qui ne sont pas des entités  mais qui sont agrégés dans l'entité et dont les propriétés seront mappées sur les colonnes correspondantes dans la table.La mise en oeuvre de cette fonctionnalité est similaire à celle utilisée avec l'annotation @EmbeddedId pour les clés primaires composées.La classe embarquée est un simple POJO qui doit être marquée avec l'annotation @javax.persistence.Embeddable

Page 18: Ado.net vs jpa

CHAPITRE II

Java persistance API3-LE FICHIER DE CONFIGURATION DE MAPPINGest aussi possible de définir le mapping dans un fichier de mapping nommé par défaut orm.xml stocké dans le répertoire META-INF.Ce fichier orm.xml est un fichier au format xml. L'élément racine est le tag <entity-mappings>.Pour chaque entité, il faut utiliser un tag fils <entity>. Ce tag possède deux attributs :Class qui permet  préciser le nom pleinement qualifié de la classe de l'entité Access qui permet de préciser le type d'accès aux données (PROPERTY pour un accès via les getter/setter ou FIELD pour un accès via les champs). La déclaration de la clé primaire se fait dans un tag <id> fils d'un tag <attributes>. Ce tag <id> possède un attribut nommé name qui permet de préciser le nom du champ qui est la clé primaire.

Page 19: Ado.net vs jpa

CHAPITRE II

Java persistance API4-L’UTILISATION DE BEAN ENTITEToutes les actions de persistance sur ces objets sont réalisées grâce à un objet dédié de l'API : l'EntityManager.Un contexte de persistance (persistence context) est un ensemble d'entités géré par un EntityManager.41- l’EntityManagerLes interactions entre la base de données et les beans entité sont assurées par un objet de type javax.persistence.EntityManager : il permet de lire et rechercher des données mais aussi de les mettre à jour (ajout, modification, suppression). L'EntityManager est donc au coeur de toutes les actions de persistance.Un EntityManager gère un ensemble défini de beans entité nommé persistence unit. La définition d'un persistence unit est assurée dans un fichier de description nommé persistence.xml.

Page 20: Ado.net vs jpa

CHAPITRE II

Java persistance APICycle de vie d’une entité

Page 21: Ado.net vs jpa

CHAPITRE II

Java persistance API42-l'obtention d'une instance de la classe EntityManager pour obtenir une instance de type EntityManager, il faut utiliser une fabrique de type EntityManagerFactory. Cette fabrique propose la méthode createEntityManager() pour obtenir une instance.Pour obtenir une instance de la fabrique, il utiliser la méthode statique createEntityManagerFactory() de la classe javax.persistence.Persistence qui attend en paramètre le nom de l'unité de persistence à utiliser. Elle va rechercher le fichier persistence.xml dans le classpath et recherche dans ce fichier l'unité de persistance dont le nom est fourni.

Page 22: Ado.net vs jpa

CHAPITRE II

Java persistance API

43- L'utilisation de la classe EntityManagerLa méthode contains()La méthode clear()la méthode flush() des méthodes de mise à jour persist(), merge() et remove() ne réalise pas d'actions immédiates dans la base de données sous jacente. L'exécution de ces actions est à la discrétion de l'EntityManager selon le FlushModeType (AUTO ou COMMIT).

Page 23: Ado.net vs jpa

CHAPITRE II

Java persistance API  431- L'utilisation de la classe EntityManager pour la création d'une occurrence

Pour insérer une nouvelle entité dans la base de données, il faut : -Instancier une occurrence de la classe de l'entité Initialiser  les propriétés de l'entité -Définir les relations de l'entité avec d'autres entités au besoin -Utiliser la méthode persist() de l'EntityManager en passant en paramètre l'entité

Page 24: Ado.net vs jpa

CHAPITRE II

Java persistance API

432- L'utilisation de la classe EntityManager pour rechercher des occurrences  -La recherche à partir de la clé primaire -La recherche à partir d'une requête utilisant une syntaxe dédiée -les méthodes find() et getReference433- L'utilisation de la classe EntityManager pour rechercher des données par requêtecreateQuery(), createNamedQuery() et. La méthode setParameter()

Page 25: Ado.net vs jpa

CHAPITRE II

Java persistance API

434- L'utilisation de la classe EntityManager pour modifier une occurrencePour modifier une entité existante dans la base de données, il faut : -Obtenir une instance de l'entité à Modifier les propriétés de l'entité -il peut être nécessaire d'appeler la méthode flush() explicitement  435- L'utilisation de la classe EntityManager pour fusionner des données la méthode merge()

Page 26: Ado.net vs jpa

CHAPITRE II

Java persistance API 436- L'utilisation de la classe EntityManager pour supprimer une occurrencePour supprimer une entité existante dans la base de données, il faut : -Obtenir une instance de l'entité à supprimer -Appeler la méthode remove() de l'EntityManager la méthode persist().437- L'utilisation de la classe EntityManager pour rafraîchir les données d'une occurrenceLa méthode refresh()

Page 27: Ado.net vs jpa

Java persistance API 5-LE FICHIER PERSISTENCE.XML Ce fichier persistence.xml contient la configuration de base pour le mapping notamment en fournissant les informations sur la connexion à la base de données à utiliser.

stocké dans le répertoire META-INF

La racine du document XML du fichier persistence.xml est le tag <persistence >

Page 28: Ado.net vs jpa

Java persistance API

<persistence<persistence-unit name="ExpoJPA"> <provider> oracle.toplink.essentials.PersistenceProvider </provider> <mapping-file> META-INF/orm.xml </mapping-file> <class>

com.expose.jpa.Personne </class> <properties> <property name="toplink.jdbc.driver“ value="com.mysql.jdbc.Driver" > </property> <property name="toplink.jdbc.url” value="jdbc:mysql://localhost:3306/expojpa"> </property> <property

name="toplink.jdbc.user" value="root"> </property> </properties></persistence-unit></persistence>

Page 29: Ado.net vs jpa

CHAPITRE III

ADO.Net 1-INTRODUCTION

En utilisant le .NET, Microsoft propose sa dernière technologie d'accès aux données ADO .Net. C'est une ensemble de classes permettant de récupérer et de manipuler des données et qui fait partie intégrante de la nouvelle plate forme appelée .Net Framework.

Nous allons présenter les nouveautés ADO.Net, le modèle ADO.Net ainsi que les objets Connections, Command et DataReader.

Page 30: Ado.net vs jpa

CHAPITRE III

ADO.Net2-Les Avantages de l’ADO.net

• Une architecture plus optimisée• Un meilleur support du mode déconnecté• Un meilleur support de XML

Page 31: Ado.net vs jpa

CHAPITRE III

ADO.Net 3- L’espaces de noms

Espace de nom Description

System.Data.SqlClient Fournisseur de données spécifiques pour SQL Server V7 ou supérieur

System.Data.O leDb Propose la gestion de sources de données accédées via un driver OleDb

System.Data.Odbc Propose la gestion de sources de données accédées via un driver Odbc

System.Data.OracleClient

Propose un accès a des sources de données Oracle (V8.1.7 ou supérieure)

System.Data.XML Propose des classes permettant d’accéder a la fonctionnalité XML sous SQL server 2000 ou supérieur

System.Data.SQLType Propose des classes des types de données spécifiques à Microsoft SQL Server

Page 32: Ado.net vs jpa

CHAPITRE III

ADO.Net

4-Le Modèle Objet

Page 33: Ado.net vs jpa

CHAPITRE II

Java persistance API4-1 Les Objets

Objet Description

Connection Ouvre une connexion vers une source de données spécifique

Command Exécute une commande sur une source de données

DataReader Lit un flux de données à partir d’une source de données en mode connecté. Le mode d’accès est en lecture seule avec un curseur en avant seulement.

DataSet Représente un ensemble de données en mode déconnecté. Il peut être constitue de plusieurs tables ainsi que des relations et contraintes existant entres elles.

DataAdapter Remplit un DataSet et répercute les mises à jour dans la source de données

Page 34: Ado.net vs jpa

CHAPITRE III

ADO.Net4-1-1 Objet ConnectionLa connectivité à SQL Server est assurée par l'objet SqlConnection de l'espace de noms System.Data.SqlClient. Le Framework .Net propose ainsi des objets de connexion différents en fonction du type de fournisseur de données choisi. Par exemple vous devrez utiliser l'objet OleDbConnection si votre fournisseur est un fournisseur OleDb.L'ouverture d'une connexion est réalisée par la méthode Open() et la fermeture par la méthode Close().

Page 35: Ado.net vs jpa

CHAPITRE III

ADO.Net4-1-2 L’objet CommandeLa création d'un objet Command nécessite l'instanciation d'un objet SqlCommand. Cet objet expose différentes méthodes Execute à utiliser selon le résultat attendu :La méthode ExecuteReader peut être utilisée pour récupérer un jeu d'enregistrements et retourne un objet DataReader.La méthode ExecuteScalar récupère une valeur unitaire.La méthode ExecuteNonQuery exécute une commande ne retournant pas de lignes.

Page 36: Ado.net vs jpa

CHAPITRE III

ADO.Net4-1-3 L’objet DataReader

L'objet DataReader permet de récupérer d'une source de données un flux en lecture seule en avant seulement (readonly, forwardonly). Il résulte de l'exécution de la méthode ExecuteReader sur un objet Command.

L'objet DataReader ne stocke en mémoire qu'une seule ligne à la fois, permettant ainsi d'augmenter les performances d'une application et d'en réduire la charge.

Page 37: Ado.net vs jpa

CHAPITRE III

ADO.Net4-1-4 L’objet DataSet

Le Data Set est un objet qui réside en mémoire et qui correspond à une copie locale des données d'une telle base de données. D’abord, il contient les tables d'une base, leurs relations et les contraintes appliquées aux données.

Page 38: Ado.net vs jpa

CHAPITRE III

ADO.Net4-1-4-1 Le Modèle Objet d’un DataSet

Page 39: Ado.net vs jpa

CHAPITRE III

ADO.Net4-1-4-1-1 La Collection DataTableCollectionCette collection peut contenir de zéro à n objets de type DataTable. Chaque objet DataTable représente une table d'une source de données. Chaque DataTable est constituée d'une collection Columns et d'une collection Rows qui peuvent contenir respectivement de zéro à n objets DataRow et DataColumn

Page 40: Ado.net vs jpa

CHAPITRE III

ADO.Net4-1-4-1-2 La Collection DataRelationCollection

Cette collection peut contenir de zéro à n objets de type DataRelation. Un objet DataRelation défini une relation parent-enfant entre deux tables à partir des valeurs des clés étrangères.

Page 41: Ado.net vs jpa

CHAPITRE III

ADO.Net4-1-4-1-3 La Collection DataAdapter

Un objet DataSet doit être capable d'interagir avec une ou plusieurs sources de données. Pour réaliser cette action le Framework Microsoft .Net fournit un objet nommé DataAdapter. L'objet DataAdapter sert de liaison entre un objet DataSet et une source de données.

Page 42: Ado.net vs jpa

CHAPITRE III

ADO.Net4-1-4-1-4 La Collection DataAdapter

Un objet DataSet doit être capable d'interagir avec une ou plusieurs sources de données. Pour réaliser cette action le Framework Microsoft .Net fournit un objet nommé DataAdapter. L'objet DataAdapter sert de liaison entre un objet DataSet et une source de données.

Page 43: Ado.net vs jpa

CHAPITRE III

ADO.Net4-1-4-1-4-1 Les Propriétés du DataAdapter

Propriété Description

SelectCommand La propriété SelectCommand permet de récupérer des données d’une source.

InsertCommand La propriété InsertCommandecrit les lignes insérées d’un DataSet vers une source de données.

UpdateCommand La propriété UpdateCommand écrit les lignes modifiées d’un DataSet vers une source de données.

DeleteCommand La propriété DeleteCommand efface les lignes supprimées d’un DataSet d’une source de données.

Page 44: Ado.net vs jpa

CHAPITRE III

ADO.Net4-1-4-1-4-2 La fonctionnement du DataAdapter

Page 45: Ado.net vs jpa

Question et Réponse