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é.
•
Publicité
Spring Data JPA créera une classe qui implémentera cette interface pour vous.
• Exemple :
• public interface ClientRepository extends CrudRepository<Client, Long>
{…}
•
•
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
Publicité
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();
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
Publicité
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
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);
Publicité
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