Spring Data JPA – JPQL

Programming, Databases, Software Engineering · course

SPRING DATA JPA – JPQL

UP ASI

Bureau E204

© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA - JPQL

1

Plan du Cours

– JPQL

– Requêtes SELECT, UPDATE, DELETE, INSERT avec JPQL et Native Query

– @Query

– @Modifying

– @Param

© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA - JPQL

2

JPQL

JPQL = Java Persistence Query Language

JPQL peut être considéré comme une version orientée objet de SQL.

• En JPQL on sélectionne des objets d'une entité (une classe annotée par @Entity)

en utilisant les noms des attributs et le nom de la classe de l’entité en question et

non plus ceux de la table de base de données et ses colonnes.

© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA - JPQL

3

SELECT

• Ces méthodes permettent de récupérer les clients qui ont une profession donné :

Publicité

JPQL :

@Query("SELECT c FROM Client c WHERE c.profession= :profession")

List<Client> retrieveClientsByProfession(@Param("profession") Profession

profession);

C’est équivalent à :

@Query("SELECT c FROM Client c WHERE c.profession= ?1")

List<Client> retrieveClientsByProfession(Profession profession);

Supposons que nous avons mapper l’entité Client avec la table associé T_Client

• Native Query (SQL et non JPQL) :

@Query(value = "SELECT * FROM T_Client c WHERE c.profession= :profession" ,

nativeQuery = true)

List<Client> retrieveClientsByProfession(@Param("profession") Profession

profession);

C’est équivalent à :

@Query(value = "SELECT * FROM T_Client c WHERE c.profession= ?1 " , nativeQuery =

true)

List<Client> retrieveClientsByProfession(Profession profession);

© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA - JPQL

4

UPDATE

Si nous souhaitons faire un UPDATE, DELETE et INSERT, nous devons ajouter

l’annotaion @Modifying pour activer la modification de la base de données.

• Ces méthodes ci-dessous permettent de mettre à jour la categorie Client en

Publicité

fonction de la profession :

JPQL :

@Modifying

@Query("update Client c set c.categorieClient = :categorie where u.profession =

:profession")

int updateClientCategorieByProfession(@Param("categorie") CategorieClient

categorieClient, @Param("profession") Profession profession);

• Native Query (SQL et non JPQL) :

A compléter ensemble.

© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA - JPQL

5

DELETE

• Ces méthodes permettent de supprimer les clients qui ont une profession et

une catégorie client donnés :

JPQL :

@Modifying

@Query(“DELETE FROM Client c WHERE c.categorieClient= :categorie AND

c.profession = :profession")

int deleteClientByCategorieClientAndProfession(@Param("categorie")

CategorieClient categorieClient, @Param("profession") Profession profession);

• Native Query (SQL et non JPQL) :

Publicité

A compléter ensemble.

© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA - JPQL

6

INSERT

• Cette méthode permet d’insérer des utilisateurs dans la table Client :

JPQL : Nous utilisons Spring Data JPA. Or INSERT ne fait pas partie des specifications

JPA. Donc, nous sommes obligé d’utiliser les Natives Query pour le INSERT.

• Pas de JPQL pour les requêtes INSERT.

• Native Query (SQL et non JPQL) :

@Modifying

@Query(value = "INSERT INTO Client (nom, prenom,

dateNaissance,email,password,profession,categorieClient) VALUES (:nom,

:prenom, :dateN, :email, :password, :profession, :categorieClient)",

nativeQuery = true)

void insertClient(@Param(”nom") String nom, @Param(”prenom") String prenom,

@Param(”dateN") Date dateNaissance, @Param(”email") String email,

@Param(”password") String password, @Param(”profession") Profession

profession, @Param(”categorieClient") CategorieClient categorieClient);

© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA - JPQL

7

Exercice

Faites une requête permettant de sélectionner tous les Client nés entre

Publicité

01/01/1995 et 31/12/1995 en SQL.

Faites la même requête en JPQL.

© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA - JPQL

8

Conclusion

• Ces requêtes JPQL seront appliquées lors du TP Magasin/Stock.

• Ce TP permettra de manipuler :

– Les Entities,

– Les Associations,

– Le CrudRepository,

– JPQL,

– Spring MVC REST,

– Spring Core (IoC : Injection de Dépendances).

© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA - JPQL

9

SPRING DATA JPA – JPQL

Si vous avez des questions, n’hésitez pas à nous

contacter :

Département Informatique

UP Architectures des Systèmes d'Information

Bureau E204

© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA - JPQL

10