Spring Data JPA

Programming, Data Management · course

Voir tous les documents en gestion et économie

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