1
Pour suivre ce cours
➔ Avoir de bonnes connaissances en java et jdbc
➔ Connaître déjà les bases d’hibernate.
➔ Un ordinateur connecté
➔ Un IDE et JDK 8+
2
Qui suis-je ?
Lhouceine OUHAMZA: Développeur Java / JEE
ouhamza.web.pro@gmail.com
3
Qui êtes-vous ?
4
C’est quoi ORM et JPA ?
5L.Ouhamza, Avril 2020
Les configurations
EntityManager persistence.xml
SessionFactory hibernate.cfg.xml
6L.Ouhamza, Avril 2020
Les niveaux de cache: L1 & L2
L2: nommé cache hibernate, ehcache
Code source: https://github.com/ouhamzalhss/Hibernate-cache-l2
7L.Ouhamza, Avril 2020
Niveau L1 Niveau L2
Session courante Les sessions créées par sessionFactory
Obligatoire Optionnelle
Activée par défaut Nécessite une configuration
Bean validation et hibernate
validation
8
Bean validation Hibernate validation
Spécification JSR-303 Implémentation de Bean validation
@Size - @Null - @Max ... @Range - @Email - @Url
L.Ouhamza, Avril 2020
Lazy-loading ou Eager-loading
Mapping Le fetch par défaut
@OneToOne
FetchType.Eager
@ManyToOne
@OneToMany
FetchType.Lazy
@ManyToMany
9L.Ouhamza, Avril 2020
Cycle de vie d’une entity
➔ New/transient: il n’est pas gérée par JPA et
elle n’existe pas en base.
➔ Managed: elle est gérée par JPA
➔ Detached : elle n’est pas gérée par JPA
Mais elle existe en base.
➔ Removed: elle est gérée par JPA et va être
effacée
10L.Ouhamza, Avril 2020
Les transactions
➔ Si on veut avoir les données de qualité
➔ Aussi d’avoir les meilleures performances
➔ Gérées dans la couche service.
➔ ...
11L.Ouhamza, Avril 2020
Mapper l’héritage
Single_table: il est par defaut, rapide, mais plusieurs colonnes
Table_per_class: il est efficace pas de jointure (pour récupérer
l’ensemble de types on a besoin de la clause UNION).
Joined: le mode le plus normalisé mais il impose beaucoup de jointure.
12L.Ouhamza, Avril 2020
Hibernate 5 Sep 2015
13L.Ouhamza, Avril 2020
Prise en charge de l'API Date et Heure.
14L.Ouhamza, Avril 2020
Depuis lors, vous n'avez pas besoin d'annotations ou de convertisseurs
supplémentaires pour conserver les classes de l'API Date et heure.
Obtenez les résultats de la requête sous
forme de flux
15L.Ouhamza, Avril 2020
Le code suivant montre un exemple simple qui sélectionne toutes les entités
Book de la base de données et les traite comme un flux.
Récupérer plusieurs entités par leur clé
primaire
16L.Ouhamza, Avril 2020
Comme vous pouvez le voir dans la sortie du journal, Hibernate crée une seule
requête pour sélectionner les 3 enregistrements dans la base de données. C'est
la même requête que vous implémenteriez vous-même, mais l'API est beaucoup
plus facile à utiliser.
Rejoindre des entités non
associées dans une requête
17L.Ouhamza, Avril 2020
@Repeatable annotations
les annotations sont maintenant répétables et peuvent
être affectées plusieurs fois, ce qui rend le code plus
facile à lire et beaucoup plus confortable à utiliser.
18L.Ouhamza, Avril 2020
Evolution de persistance de données
19L.Ouhamza, Avril 2020
De plus complexe au plus facile à implémenter
Via JDBC
20L.Ouhamza, Avril 2020
Plein de code
et donc plein
de bugs.
Hibernate Jpa sans Spring
21L.Ouhamza, Avril 2020
C’est nous qui va
créer et gérer
l’entityManager
Spring et Hibernate Jpa sans Spring Data
22L.Ouhamza, Avril 2020
Spring nous crée
EntityManager
(IOC)
Spring Data
23L.Ouhamza, Avril 2020
Spring data fait le
tous
24

Hibernate jpa

  • 1.
  • 2.
    Pour suivre cecours ➔ Avoir de bonnes connaissances en java et jdbc ➔ Connaître déjà les bases d’hibernate. ➔ Un ordinateur connecté ➔ Un IDE et JDK 8+ 2
  • 3.
    Qui suis-je ? LhouceineOUHAMZA: Développeur Java / JEE ouhamza.web.pro@gmail.com 3
  • 4.
  • 5.
    C’est quoi ORMet JPA ? 5L.Ouhamza, Avril 2020
  • 6.
  • 7.
    Les niveaux decache: L1 & L2 L2: nommé cache hibernate, ehcache Code source: https://github.com/ouhamzalhss/Hibernate-cache-l2 7L.Ouhamza, Avril 2020 Niveau L1 Niveau L2 Session courante Les sessions créées par sessionFactory Obligatoire Optionnelle Activée par défaut Nécessite une configuration
  • 8.
    Bean validation ethibernate validation 8 Bean validation Hibernate validation Spécification JSR-303 Implémentation de Bean validation @Size - @Null - @Max ... @Range - @Email - @Url L.Ouhamza, Avril 2020
  • 9.
    Lazy-loading ou Eager-loading MappingLe fetch par défaut @OneToOne FetchType.Eager @ManyToOne @OneToMany FetchType.Lazy @ManyToMany 9L.Ouhamza, Avril 2020
  • 10.
    Cycle de vied’une entity ➔ New/transient: il n’est pas gérée par JPA et elle n’existe pas en base. ➔ Managed: elle est gérée par JPA ➔ Detached : elle n’est pas gérée par JPA Mais elle existe en base. ➔ Removed: elle est gérée par JPA et va être effacée 10L.Ouhamza, Avril 2020
  • 11.
    Les transactions ➔ Sion veut avoir les données de qualité ➔ Aussi d’avoir les meilleures performances ➔ Gérées dans la couche service. ➔ ... 11L.Ouhamza, Avril 2020
  • 12.
    Mapper l’héritage Single_table: ilest par defaut, rapide, mais plusieurs colonnes Table_per_class: il est efficace pas de jointure (pour récupérer l’ensemble de types on a besoin de la clause UNION). Joined: le mode le plus normalisé mais il impose beaucoup de jointure. 12L.Ouhamza, Avril 2020
  • 13.
    Hibernate 5 Sep2015 13L.Ouhamza, Avril 2020
  • 14.
    Prise en chargede l'API Date et Heure. 14L.Ouhamza, Avril 2020 Depuis lors, vous n'avez pas besoin d'annotations ou de convertisseurs supplémentaires pour conserver les classes de l'API Date et heure.
  • 15.
    Obtenez les résultatsde la requête sous forme de flux 15L.Ouhamza, Avril 2020 Le code suivant montre un exemple simple qui sélectionne toutes les entités Book de la base de données et les traite comme un flux.
  • 16.
    Récupérer plusieurs entitéspar leur clé primaire 16L.Ouhamza, Avril 2020 Comme vous pouvez le voir dans la sortie du journal, Hibernate crée une seule requête pour sélectionner les 3 enregistrements dans la base de données. C'est la même requête que vous implémenteriez vous-même, mais l'API est beaucoup plus facile à utiliser.
  • 17.
    Rejoindre des entitésnon associées dans une requête 17L.Ouhamza, Avril 2020
  • 18.
    @Repeatable annotations les annotationssont maintenant répétables et peuvent être affectées plusieurs fois, ce qui rend le code plus facile à lire et beaucoup plus confortable à utiliser. 18L.Ouhamza, Avril 2020
  • 19.
    Evolution de persistancede données 19L.Ouhamza, Avril 2020 De plus complexe au plus facile à implémenter
  • 20.
    Via JDBC 20L.Ouhamza, Avril2020 Plein de code et donc plein de bugs.
  • 21.
    Hibernate Jpa sansSpring 21L.Ouhamza, Avril 2020 C’est nous qui va créer et gérer l’entityManager
  • 22.
    Spring et HibernateJpa sans Spring Data 22L.Ouhamza, Avril 2020 Spring nous crée EntityManager (IOC)
  • 23.
    Spring Data 23L.Ouhamza, Avril2020 Spring data fait le tous
  • 24.

Notes de l'éditeur

  • #8 Le cache de premier niveau est le cache de session. Les objets sont mis en cache dans la session en cours et ils ne sont actifs que jusqu'à la fermeture de la session. Le cache de deuxième niveau existe tant que la fabrique de sessions est active.