22 0 246KB
SPRING DATA JPA – JPQL
UP ASI Bureau E204 © 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring Data JPA – JPQL
1
Plan du Cours – JPQL – Requêtes SELECT, UPDATE, DELETE, INSERT avec JPQL et Native Query
– @Query – @Modifying – @Param
© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring Data JPA – JPQL
2
JPQL • JPQL = Java Persistence Query Language • JPQL peut être considéré comme une version orientée objet de SQL.
© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring Data JPA – JPQL
3
SELECT • Ces méthodes permettent de récupérer les utilisateurs qui ont un role donné : • JPQL : @Query("SELECT u FROM User u WHERE u.role= :role") List retrieveUsersByRole(@Param("role") Role role); C’est équivalent à : @Query("SELECT u FROM User u WHERE u.role= ?1") List retrieveUsersByRole(Role role);
• Native Query (SQL et non JPQL) : @Query(value = "SELECT * FROM T_USER u WHERE u.role= :role " , nativeQuery = true) List retrieveUsersByRole(@Param("role") Role role); C’est équivalent à : @Query(value = "SELECT * FROM T_USER u WHERE u.role= ?1 " , nativeQuery = true) List retrieveUsersByRole(Role role); © 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – 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 le role en fonction du prénom : • JPQL : @Modifying @Query("update User u set u.role = :role where u.firstName = :fname") int updateUserStatusByFirstName(@Param("role") Role role, @Param("fname") String fname);
• Native Query (SQL et non JPQL) : •
A compléter ensemble.
© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring Data JPA – JPQL
5
DELETE • Ces méthodes permettent de supprimer les utilisateurs qui ont un role et un prénom donnés : • JPQL : @Modifying @Query(“DELETE FROM User u WHERE u.role = :role AND u.firstName = :fname") int deleteUserByStatusAndFirstName(@Param("role") Role role, @Param("fname") String fname);
• Native Query (SQL et non JPQL) : •
A compléter ensemble.
© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring Data JPA – JPQL
6
INSERT • Cette méthode permet d’insérer des utilisateurs dans la table T_USER : • 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 INSET. • Pas de JPQL pour les requêtes INSERT. • Native Query (SQL et non JPQL) : @Modifying @Query(value = "INSERT INTO T_USER (firstName, lastName, role) VALUES (:fn, :ln, :role)", nativeQuery = true) void insertUser(@Param("fn") String fn, @Param("ln") Integer ln, @Param("role") Integer role);
© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring Data JPA – JPQL
7
Conclusion • Ces requêtes JPQL seront appliquées lors du TP TIMESHEET. • Ce TP permettra de manipuler : – Les Entities, – Les Associations, – Le CrudRepository, – JPQL, – Spring MVC REST, – Spring Core (IoC : Injection de Dépendances).
© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring Data JPA – JPQL
8
SPRING DATA JPA – JPQL
Si vous avez des questions, n’hésitez pas à nous contacter : Département Informatique UP ASI Bureau E204
© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring Data JPA – JPQL
9