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é :
Advertisement
•
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
Advertisement
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) :
•
Advertisement
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
Advertisement
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