Vous êtes sur la page 1sur 9

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<User> retrieveUsersByRole(@Param("role") Role role);
C’est équivalent à :
@Query("SELECT u FROM User u WHERE u.role= ?1")
List<User> retrieveUsersByRole(Role role);

• Native Query (SQL et non JPQL) :


@Query(value = "SELECT * FROM T_USER u WHERE u.role= :role " , nativeQuery =
true)
List<User> retrieveUsersByRole(@Param("role") Role role);
C’est équivalent à :
@Query(value = "SELECT * FROM T_USER u WHERE u.role= ?1 " , nativeQuery = true)
List<User> 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

Vous aimerez peut-être aussi