SPRING DATA JPA (CrudRepository)
UP ASI Bureau E204
© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA
1
Plan du Cours
– Spring Data – Spring Data JPA
– CRUD Repository interface – Créer et Utiliser un Repository
– TP Spring Boot + Spring Data JPA
© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA
2
SPRING DATA
• C’est un module Spring qui a pour but de :
– Faciliter l’écriture des couches d’accès aux données. – Offrir une abstraction commune pour l’accès aux données quelle que soit la
source de données (SQL ou NoSQL).
© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA
3
SPRING DATA JPA
• Spring Data JPA est un sous projet du projet Spring Data.
© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA
4
SPRING DATA JPA
• Code répétitif avec les DAO (Data Access Object) avant Spring Data JPA:
© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA
5
SPRING DATA JPA
• Avec Spring Data JPA, il vous suffit de définir une interface qui permet de
manipuler une entité, en étendant l’interface CrudRepository <T, ID> et de déclarer les méthodes pour manipuler cette entité.
•
Spring Data JPA créera une classe qui implémentera cette interface pour vous.
• Exemple : • public interface ClientRepository extends CrudRepository<Client, Long>
{…}
•
•
Publicité
L’interface ClientRepository étend l’interface CrudRepository<Client, Long>. Elle contient les méthode pour manipuler l’entité Client.
Spring Data JPA va automatiquement créer une classe qui implémente cette interface au moment de l’exéctuion de la l’application.
© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA
6
SPRING DATA JPA
•
Spring Data JPA va créer le code pour les méthodes que tu souhaite utiliser. Il suffit de lui indiquer les méthodes à utiliser :
Keyword
Sample
Equivalent to
GreaterThan
LessThan
Between
findByDateNaissanceGreaterThan(Date dateN); findByDateNaissanceLessThan(Date dateN); findByDateNaissanceBetween(Date dFrom, Date dTo);
Select c from Client c where c.dateNaissance > :dateN
Select c from Client c where c.dateNaissance < :dateN Select c from Client c where c.dateNaissance between :dFrom and :dTo
IsNotNull, NotNull
findByPrenomNotNull();
Select c from Client c where c.prenom is not null
IsNull, Null
findByPrenomNull();
Select c from Client c where c.prenom is null
Like
findByPrenomLike(String prenom);
Select c from Client c where c,prenom like :prenom
(No keyword)
findByPrenom(String prenom);
Select c from Client c where c,prenom = :prenom
(No keyword)
findOne(ID primaryKey);
Select u from Client c where c.idClient =:primaryKey
(No keyword)
Long count();
Publicité
Select count(*) From Client
© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA
7
Exemple d’Utilisation
@Repository public interface ClientRepository extends CrudRepository<Client, Long> {
}
© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA
8
Exercice
NB : la relation Fournisseur-Produit est une relation unidirectionnelle
Figure 1 : Diagramme de classes gestion Magasin/Stock
© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA
9
TP1 - Spring : Boot – Core – Data JPA
Sur le même projet de la séance dernière :
• Créer les package tn.esprit.spring.repository
• Créer l’interface ClientRepository :
public interface ClientRepository extends CrudRepository<…, …>
© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA
10
TP1 - Spring : Boot – Core – Data JPA
• Créer la couche Service : • Package tn.esprit.spring.service • Classe ClientServiceImpl Interface ClientSerivce • Injecter dans la couche service l’interface de la couche repository (avec • l’annotation @...)
• Méthodes à implémenter (ces méthodes vont appeler des méthodes déjà
préexistantes dans la couche repository) :
List<Client> retrieveAllClients();
Client addClient(Client c);
void deleteClient(Long id);
Client updateClient(Client c);
Client retrieveClient(Long id);
© 2021-2022 – ESPRIT – Module Architecture des SI II Spring – Spring Data JPA
11
Travail à faire
Partie 3 Spring Data JPA CRUD Repository–Le langage JPQL - JPA Repository
Publicité
Comme l’exemple de l’entité client des deux slides précèdents, Créer les CRUD des différentes entités en respectant les signatures suivantes ( à l’exception de l’entité fournisseur et rayon. Pour ces deux entités, vous pouvez insérer les données dans la base de donnée manuellement)
Entité Stock
List<Stock> retrieveAllStocks();
Stock addStock(Stock s);
Stock updateStock(Stock u);
Stock retrieveStock(Long id);
© 2021-2022 – ESPRIT – Module Architecture des SI II (Spring)
12
Travail à faire
Partie 3 Spring Data JPA CRUD Repository–Le langage JPQL - JPA Repository
Entité Produit
List<Produit> retrieveAllProduits();
Produit addProduit(Produit p, Long idRayon, Long idStock);
Produit retrieveProduit(Long id);
NB: Pour l’ajout de produit, il faut créer en même temps le détail produit (entité produit avec l’entité associé detailProduit )
© 2021-2022 – ESPRIT – Module Architecture des SI II (Spring)
13
Travail à faire
Partie 3 Spring Data JPA CRUD Repository–Le langage JPQL - JPA Repository
Entité Facture
List<Facture> retrieveAllFactures(); void cancelFacture(Long id); Facture retrieveFacture(Long id);
NB : pour l’annulation de la facture, il faut que le champs active de la table facture soit mis à false.
© 2021-2022 – ESPRIT – Module Architecture des SI II (Spring)
14
SPRING DATA JPA (CrudRepository)
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
15