66

AFIA Amine ╫ ZOHAYR Nadia ╫ CHATIR Imane ╫ BARQANE Meriem ╫ NAJIMI Najoua

Embed Size (px)

DESCRIPTION

Réalisé par :. AFIA Amine ╫ ZOHAYR Nadia ╫ CHATIR Imane ╫ BARQANE Meriem ╫ NAJIMI Najoua. Plan. La création. Problématique Mapping Objet/Relationnel Qu’est ce que hibernate ? Configuration du projet hibernate. Problématique. - PowerPoint PPT Presentation

Citation preview

Page 1: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 2: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

AFIA Amine ╫ ZOHAYR Nadia ╫ CHATIR Imane

╫ BARQANE Meriem ╫ NAJIMI Najoua

Réalisé par :

Page 3: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

création

mise en route

Manipulation

Plan

Page 4: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

La création

o Problématiqueo Mapping Objet/Relationnelo Qu’est ce que hibernate?o Configuration du projet hibernate

Page 5: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Problématique

L’utilisation du JDBC (Java DataBase Connectivity) implique que le développeur implémente lui-même l'interaction avec les bases de données et les requêtes SQL qui sont nécessaires à la persistance des données de son application.

Page 6: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

mapping Objet/Relationnel

La technique du mapping relationnel-objet (également appelé ORM pour Object Relational Mapping) permet de faire le lien entre le modèle des classes et le schéma relationnel et de réaliser les transcriptions nécessaires au passage de l’objet vers le relationnel.

Solution

Page 7: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

mapping Objet/Relationnel

Grace à cette notion de mapping le temps de développement de l’application est réduit, en éliminant une grande partie du code SQL à écrire pour interagir avec la base de données.

Solution

Page 8: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

mapping Objet/Relationnel

Cette technique permet ainsi de faire automatiquement les transcriptions suivantes:

Mode objet Mode relationnel

classe table

instance enregistrement

attribut colonne

association Clé étrangère

Solution

Page 9: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Qu’est ce que l’hibernate?

Hibernate est un outil de mapping Objet/Relationnel. C’est un framework open source qui permet de faire correspondre des tables de base de données relationnelles avec des objets java.

Page 10: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Qu’est ce que l’hibernate?

Hibernate permet de gérer les transactions coté base de données, et de manipuler facilement les données et assurer leur persistance au niveau de la base de données.

Page 11: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Les surplus de hibernate

• hibernate se charge de générer le code SQL.

• récupération de données optimisée.

• portabilité du code si changement de base de données.

Page 12: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Hibernate a besoin de plusieurs éléments pour fonctionner :

• Configuration du projet Eclipse.

• Une classe javabean qui encapsule les données d'une occurrence de table.

• Un fichier de configuration qui assure la correspondance entre la classe et la table (mapping).

Page 13: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Configuration d’un projet hibernate

1. Etablir la connexion entre MySql et Eclipse.

2. Etablir la connexion entre Hibernate et Eclipse.

3. Etablir la connexion entre Hibernate et MySql.

Page 14: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

La mise en route

o Création entité jpao Configuration hibernateo Contexte de persistance et sessionso Génération de base de donnée

Page 15: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Création entité jpa

• Créer une classe qui va encapsuler les données Cette classe doit respecter le standard des Javabeans, notamment, encapsuler les propriétés dans ses champs private avec des getters et setters et avoir un constructeur par défaut.

Page 16: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

• Afin que JPA puisse faire le lien entre un objet Java et la base de données, les classes à mapper sont définies en tant qu’entité JPA. Pour ce faire, on les déclare avec l'annotation @Entity. Elle doit également comporter au moins un attribut déclaré comme clé primaire à l'aide de l'annotation @Id.

Création entité jpa

Premier mapping

Page 17: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

• Comme nous l’avons vu, la classe est déclarée avec l’annotation @Entity , qui indique que la classe est une entité JPA et qu’elle doit donc être mappée .

• La norme de l’API JPA nécessite également que l’on précise quel est l’id de la table . L’annotation @GeneratedValue indique à l’API comment gérer l’incrément des identifiants. Ici, nous avons choisi un incrément automatique.

Page 18: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

• Ajoutons maintenant quelques annotations supplémentaires pour préciser le mapping que nous désirons. Toutes ces nouvelles annotations sont facultatives, mais souvent nécessaires : dans notre exemple, nous avons notamment besoin de préciser que l'attribut beginDate est de type DATE et non DATETIME.

Des annotations supplémentaires

Page 19: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

• En supplément de l’annotation @Entity, la JPA propose de préciser le nom de la table en utilisant l’annotation @Table .

• Pour chaque attribut, l’annotation @Column indique le nom que l’on désire donner au champ dans la table.

Page 20: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Configuration d'Hibernate• Notre première entité JPA étant désormais écrite, il

faut maintenant paramétrer Hibernate pour qu’il puisse se connecter à notre base de données.

• Avant toute chose, il est à noter qu’Hibernate est capable de créer des tables et de faire toutes sortes d’opérations sur celles-ci ainsi que sur leurs entrées. Toutefois, la base de données en elle-même doit préalablement exister, et donc avoir été créée manuellement.

• Pour créer la base de données, utilisons l’outil PhpMyAdmin fourni par Wamp Server.

Page 21: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Pour exécuter Hibernate, il faut lui fournir un certain nombre de propriétés concernant sa configuration pour qu'il puisse se connecter à la base de données.

• Ces propriétés peuvent être fournies sous plusieurs formes :

• un fichier de configuration nommé hibernate.properties et stocké dans un répertoire inclus dans le classpath

• un fichier de configuration au format XML nommé hibernate.cfg.xml

• utiliser la méthode setProperties() de la classe Configuration

• définir des propriétés dans la JVM en utilisant l'option -Dpropriété=valeur

Page 22: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Les principales propriétés pour configurer la connexion JDBC sont :

• hibernate.connection.driver_class: nom pleinement qualifié de la classe du pilote JDBC• hibernate.connection.url : URL JDBC désignant la base de données• hibernate.connection.username: nom de l'utilisateur pour la connexion• hibernate.connection.password : mot de passe de l'utilisateur

Page 23: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

nous précisons qu’à l’initialisation d’Hibernate, les

tables correspondant aux entités mappées doivent être créées. Différentes valeurs sont possibles pour ce paramètre hbm2ddl.auto :

• validate: valide le schéma, aucune modification n’est faite sur la structure de la base ;

• update: met à jour le schéma existant ;• create: crée le schéma en supprimant les données

préalablement existantes ;• create-drop: même comportement que create avec

suppression du schéma en fin de session.

Page 24: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Contexte de persistance et sessions

Pour utiliser Hibernate dans le code, il est nécessaire de réaliser plusieurs opérations :

• création d'une instance de la classe• création d'une instance de la classe SessionFactory• création d'une instance de la classe Session qui va

permettre d'utiliser les services d'Hibernate

Page 25: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

• Pour gérer les accès à la base de données, Hibernate utilise des sessions. Ce sont des instances de la classe org.hibernate.session qui permettent d'encapsuler une connexion JDBC.

• Les sessions sont créées par une instance de la classe

SessionFactory, dont le rôle est de parser le fichier de configuration Hibernate, de se connecter à la base de données et de fournir des Sessions à la demande. Habituellement, une seule instance de SessionFactory est créée dans toute l'application.

Page 26: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

• nous allons créer une classe HibernateUtils chargée de créer et de gérer la SessionFactory. La méthode getSession() de cette classe sera appelée à chaque fois que nous voudrons accéder à la base de données.

Page 27: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

• La SessionFactory instanciée se charge de lire le fichier hibernate.cfg.xml et d’initialiser Hibernate pour une utilisation ultérieure., la méthode getSession() utilise la sessionFactory pour créer une nouvelle session Hibernate, que nous pourrons alors utiliser pour accéder à la base de données.

• Notons que nous effectuons ici les premiers imports spécifiques à Hibernate. L’entité JPA , elle, ne dépend jamais d’Hibernate mais seulement de javax.persistence. De cette manière, nous pourrons conserver notre modèle tel quel si nous décidons un jour d'utiliser une autre implémentation de JPA qu'Hibernate.

Page 28: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Génération base de donnée

• La couche JPA de notre programme est désormais constituée d’une entité JPA et du fichier de configuration d’Hibernate. Le but est maintenant de compléter notre projet pour pouvoir générer la base de données et tester l’enregistrement d’un premier objet.

Page 29: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Cette classe a pour but de créer le schéma de la base de données et d’y insérer l’Event que l’on vient de créer. Pour ce faire, on suit les étapes suivantes.

• Ouverture d’une session Hibernate à l’aide de la SessionFactory gérée dans la classe HibernateUtils : c'est cet objet qui permet de créer un pont entre l'application Java et Hibernate.

• Création d’une transaction : chaque accès à la base de données en écriture doit se faire à l'intérieur d'une transaction. L'appel à la méthode commit(), au moment de la fermeture de la transaction, permet de synchroniser la base de données et d'y effectuer les modifications nécessaires.

Page 30: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

• Création de l'objet Event à enregistrer • Enregistrement de l'objet à l'aide de la

méthode save qu'Hibernate transformera en une opération SQL insert.

• Fermeture de la transaction et synchronisation du programme Java avec la base de données.

• Fermeture de la session : l'opération de sauvegarde est terminée, le lien avec Hibernate peut être fermé.

Page 31: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

La manipulation

o Langage HQLo CRUDo Les associationso Relations (one-to-one)(many-to-one )(many-to-

many)o Conclusion

Page 32: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Découverte du langage HQL

• Découvrir HQL

• Création de la classe de tests

• Afficher et vider la table EVENTS– Vider la table EVENTS– Afficher le contenu de la table EVENTS– Test des méthodes de suppression et d'affichage

Page 33: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

H Q L

Hibernate Query Language

Page 34: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

C’est quoi HQL ?

• Il est aussi possible d'utiliser l'API Criteria qui va en interne exécuter une requête HQL. Le point d'entrée est d'obtenir une instance de type Criteria en invoquant la méthode createCriteria() de la session Hibernate courante : elle attend en paramètre la classe des objets attendus en résultat. L'API permet de préciser les différents critères qui seront utilisés pour générer la requête. L'API Criteria utilise HQL en sous-jacent.

• Le langage HQL est proche de SQL avec une utilisation sous forme d'objets des noms de certaines entités . C'est Hibernate qui se charge de générer la requête SQL à partir de la requête HQL en tenant compte du contexte

• Langage d'interrogation commun à toutes les bases de données

• indépendant de la base de données sous jacente : la requête SQL sera générée par Hibernate à partir du HQL en fonction de la base de données précisée via un dialect.

• les entités utilisées dans les requêtes HQL sont des objets et des propriétés. La syntaxe de HQL et ses fonctionnalités de base sont très similaire à SQL.

Page 35: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 36: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 37: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 38: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 39: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Le test

Page 40: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

classe de tests prête ---> CRUD

Page 41: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Manipulation d'objets et opérations CRUD

o Création d'un objet

o Récupération d'un objet

o Modification d'un objet

o Suppression d'un objet

Page 42: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 43: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 44: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 45: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 46: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

• Arrivé à ce point , nous savons désormais comment mapper une classe et comment manipuler les objets mappés. Mais un projet utilisant Hibernate nécessite bien évidemment plusieurs classes, souvent liées entre elles par diverses associations, qu'il faut elles aussi mapper et transformer en clés étrangères ou en tables de jointure. C'est notamment le cas de l'étude de cas que nous vous proposons.

Page 47: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Gestion des associations

• Arborescence du projet

• Configuration du projet

Structure générale Fichier de configuration

d'Hibernate Fichier HibernateUtils.java

Page 48: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Relation one-to-one(1--1)

• Création des entités JPA Address et Event– La classe Address– La classe Event

• Enregistrement des objets– La classe Main– Implémentation de testCreate()

• L'annotation Cascade– Définition des cascades– Ajout d'une cascade dans le projet

Page 49: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 50: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 51: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 52: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 53: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 54: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 55: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

cascades

• Il existe différents types de Cascade en JPA, qui peuvent se cumuler. Les principales sont :– CascadeType.PERSIST pour les opérations de persistance

(méthodes persist() et save()),– CascadeType.MERGE pour les opérations de merge

(méthode merge()),– CascadeType.REMOVE pour la suppression (méthode

delete()), – CascadeType.ALL pour cumuler toutes les opérations de

Cascade.

Page 56: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Dans event

Page 57: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Relation many-to-one(1--n)

• Implémentation de l'association– Relation bidirectionnelle– Mapping de la classe User– Modifications du mapping de la classe Event

• Modifications de la classe de test– Affichage du contenu de la table USERS– Modification de l'affichage de la table EVENTS– Enregistrement de nouveaux utilisateurs– L'importance des cascades

Page 58: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 59: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Relation many-to-many(n--n)

• Mapping d'une relation many-to-many– La classe Guest– Ajouts dans l'entité Event

• Test du mapping– Méthode printGuests()– Méthode testCreate()

Page 60: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 61: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 62: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

• Dans l'entité Event, ajoutons l'attribut relatif aux Items et le mapping, cette fois en @OneToMany:

Page 63: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Test du mapping

Page 64: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 65: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua
Page 66: AFIA Amine  ╫ ZOHAYR Nadia  ╫  CHATIR Imane  ╫  BARQANE Meriem   ╫   NAJIMI  Najoua

Conclusion