Atelier 3 Spring Boot-1

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 36

Atelier 3 Spring boot

Persister et interroger les données avec


Spring Data JPA

Sonda Ammar, Emna KALLEL


objectifs
1. Créer une association OneToMany entre deux entités,
2. Utilisation de Lombok,
3. Interroger les entités en fournissant un attribut non clé,
4. Ecrire des requêtes @Query en utilisant le langage JPQL,
5. Ecrire des requêtes @Query en passant des entités en
paramètre,
6. Interroger les produits selon l’id de leur catégorie,
7. Ajouter les méthodes du Repository à la couche Service.

Sonda AMMAR, Emna KALLEL 2


objectifs
1. Créer une association OneToMany entre deux entités,
2. Utilisation de Lombok,
3. Interroger les entités en fournissant un attribut non clé,
4. Ecrire des requêtes @Query en utilisant le langage JPQL,
5. Ecrire des requêtes @Query en passant des entités en
paramètre,
6. Interroger les produits selon l’id de leur catégorie,
7. Ajouter les méthodes du Repository à la couche Service.

Sonda AMMAR, Emna KALLEL 3


Créer une association OneToMany
entre deux entités,

Sonda AMMAR, Emna KALLEL 4


Créer l’entité catégorie
1. Sachant qu’un produit possède une et une seule catégorie, et une
catégoriecontient plusieurs produits. Créer, L’entité Categorie :

Sonda AMMAR, Emna KALLEL 5


Categorie.java: Définition des arguments
@Entity
public class Categorie {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idCat;
private String nomCat;
private String descriptionCat;

@OneToMany(mappedBy = "categorie")
private List<Produit> produits;
}
• Ajouter ensuite les getters et les setters, les constructeurs et
toString
Sonda AMMAR, Emna KALLEL 6
Produit.java: ajouter l’attribut categorie

@ManyToOne
private Categorie categorie;

• Exécuter ensuite le projet ( Rappel: vérifier que MySQL et


apach de Xamp sont déjà lancé)

Sonda AMMAR, Emna KALLEL 7


Console

Sonda AMMAR, Emna KALLEL 8


phpMyAdmin

Clé étrangère

Sonda AMMAR, Emna KALLEL 9


objectifs
1. Créer une association OneToMany entre deux entités,
2. Utilisation de Lombok,
3. Interroger les entités en fournissant un attribut non clé,
4. Ecrire des requêtes @Query en utilisant le langage JPQL,
5. Ecrire des requêtes @Query en passant des entités en
paramètre,
6. Interroger les produits selon l’id de leur catégorie,
7. Trier les données,
8. Ajouter les méthodes du Repository à la couche Service.
Sonda AMMAR, Emna KALLEL 10
UtilisationdeLombok
• Lombok est une bibliothèque java permettant de
simplifier le code des entités en épargnant au
développeur l’écriture des méthodes getters, setters,
equals,…
• Lombok injecte automatiquement ces méthodes dans
le byte code lors de la compilation.

Sonda AMMAR, Emna KALLEL 11


Installation de Lombok
• Télécharger Lombok.jar à partir de :
https://projectlombok.org/download puis exécuter le
• Spécifier l’emplacement de l’exécutable de votre IDE :
SpringToolSuite4.exe puis appuyer sur install.

• Rédemarrer votre ordinateur


Sonda AMMAR, Emna KALLEL 12
Configuration du fichier pom.xml

• Ajouter au fichier pom.xml ces dépendances

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

Sonda AMMAR, Emna KALLEL 13


Modifier la classe Categorie
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Categorie {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idCat;
private String nomCat;
private String descriptionCat;

@OneToMany(mappedBy = "categorie")
private List<Produit> produits;

Sonda AMMAR, Emna KALLEL 14


L’injection automatique des méthodes
Dans Outline (window➔show view➔outline ) vous remarquez l’ajout des
différents objets

Sonda AMMAR, Emna KALLEL 15


objectifs
1. Créer une association OneToMany entre deux entités,
2. Utilisation de Lombok,
3. Interroger les entités en fournissant un attribut non clé,
4. Ecrire des requêtes @Query en utilisant le langage JPQL,
5. Ecrire des requêtes @Query en passant des entités en
paramètre,
6. Interroger les produits selon l’id de leur catégorie,
7. Ajouter les méthodes du Repository à la couche Service.

Sonda AMMAR, Emna KALLEL 16


Interroger les entités en fournissant
un attribut non clé,
• Pour chercher un produit on a utilisé dans
l’atelier précédent la méthode findById(id) en
lui donnant comme l’identifiant du produit
• On se propose à présent de créer les méthodes
nécessaires pour interroger les données des
produits en fournissant le nom du produit
comme critère de recherche.

Sonda AMMAR, Emna KALLEL 17


L’interface ProduitRepository
• Si on veut chercher selon le nom du produit on modifie
l’interface ProduitRepository comme suit:

public interface ProduitRepository extends JpaRepository<Produit, Long>


{

List<Produit> findByNomProduit(String nom);


Le même nom que l’attribut de l’entité
} Produit

• Par convention le nom de la méthode doit commencer par


findBy suivi par le nom le l’attribut de la classe entité avec un
majuscule dans la première lettre.

Sonda AMMAR, Emna KALLEL 18


Modifier ProduitsApplicationTests
• Tester la méthode findByNomProduit en ajoutant la méthode
testFindByNomProduit à la classe ProduitsApplicationTests
@Test
public void testFindByNomProduit()
{
List<Produit> prods = produitRepository.findByNomProduit(«pc dell»);
for (Produit p : prods)
{
System.out.println(p);
}
}

• Pour chercher un produit en donnant juste une partie du nom du


produit on utilise la méthode findByNomProduitContains
Sonda AMMAR, Emna KALLEL 19
Exécution avec junit

Sonda AMMAR, Emna KALLEL 20


objectifs
1. Créer une association OneToMany entre deux entités,
2. Utilisation de Lombok,
3. Interroger les entités en fournissant un attribut non clé,
4. Ecrire des requêtes @Query en utilisant le langage JPQL,
5. Ecrire des requêtes @Query en passant des entités en
paramètre,
6. Interroger les produits selon l’id de leur catégorie,
7. Ajouter les méthodes du Repository à la couche Service.

Sonda AMMAR, Emna KALLEL 21


Interroger les entités en fournissant
plusieurs critères,
• On se propose à présent de créer les méthodes
nécessaires pour interroger les données des
produits en fournissant plusieurs critères de
recherche.
• Pour ce faire on va utiliser l’annotation @Query
et le langage JPQL(JPA Query Langage).

Sonda AMMAR, Emna KALLEL 22


Modifier l’interface ProduitRepository
• Créer la méthode findByNomPrix dans
l’interface ProduitRepository, qui retourne les
produits dont le nom contient un texte donné
et le prix est supérieur à une valeur donnée

@Query("select p from Produit p where p.nomProduit like %?1 and


p.prixProduit > ?2")
List<Produit> findByNomPrix (String nom, Double prix);

Sonda AMMAR, Emna KALLEL 23


Modifier ProduitsApplicationTests
• Tester la méthode testfindByNomPrix en ajoutant la méthode
testfindByNomPrix à la classe ProduitsApplicationTests

@Test
public void testfindByNomPrix()
{
List<Produit> prods = produitRepository.findByNomPrix("dell",
1000.0);
for (Produit p : prods)
{
System.out.println(p);
}
}

Sonda AMMAR, Emna KALLEL 24


Exécution avec junit

Sonda AMMAR, Emna KALLEL 25


objectifs
1. Créer une association OneToMany entre deux entités,
2. Utilisation de Lombok,
3. Interroger les entités en fournissant un attribut non clé,
4. Ecrire des requêtes @Query en utilisant le langage JPQL,
5. Ecrire des requêtes @Query en passant des entités en
paramètre,
6. Interroger les produits selon l’id de leur catégorie,
7. Ajouter les méthodes du Repository à la couche Service.

Sonda AMMAR, Emna KALLEL 26


récupérer les produits qui ont une
catégorie donnée
• Créer la méthode findByCategorie dans l’interface
ProduitRepository, qui retourne les produits ayant une
catégorie donnée :

@Query("select p from Produit p where p.categorie = ?1")


List<Produit> findByCategorie (Categorie categorie);

Sonda AMMAR, Emna KALLEL 27


Modifier ProduitsApplicationTests
Tester la méthode findByCategorie en ajoutant la méthode
testFindByCategorie à la classe ProduitsApplicationTests
@Test
public void testfindByCategorie()
{
Categorie cat = new Categorie();
cat.setIdCat(1L);
List<Produit> prods = produitRepository.findByCategorie(cat);
for (Produit p : prods)
{
System.out.println(p);
}
}

Sonda AMMAR, Emna KALLEL 28


Insertion du donnée via phpMyAdmin

Sonda AMMAR, Emna KALLEL 29


Exécution avec junit

Sonda AMMAR, Emna KALLEL 30


objectifs
1. Créer une association OneToMany entre deux entités,
2. Utilisation de Lombok,
3. Interroger les entités en fournissant un attribut non clé,
4. Ecrire des requêtes @Query en utilisant le langage JPQL,
5. Ecrire des requêtes @Query en passant des entités en
paramètre,
6. Interroger les produits selon l’id de leur catégorie,
7. Ajouter les méthodes du Repository à la couche Service.

Sonda AMMAR, Emna KALLEL 31


récupérer les produits qui ont une
catégorie donnée
• Créer la méthode findByCategorieIdCat dans l’interface
ProduitRepository, qui retourne les produits ayant une
catégorie donnée, en fournissant l’id de la catégorie:

List<Produit> findByCategorieIdCat(Long id);

Sonda AMMAR, Emna KALLEL 32


Modifier ProduitsApplicationTests
Tester la méthode findByCategorieIdCat en ajoutant la
méthode findByCategorieIdCat à la classe
ProduitsApplicationTests

@Test
public void findByCategorieIdCat()
{
List<Produit> prods =
produitRepository.findByCategorieIdCat(1L);
for (Produit p : prods)
{
System.out.println(p);
}
}

Sonda AMMAR, Emna KALLEL 33


Exécution avec junit

Sonda AMMAR, Emna KALLEL 34


objectifs
1. Créer une association OneToMany entre deux entités,
2. Utilisation de Lombok,
3. Interroger les entités en fournissant un attribut non clé,
4. Ecrire des requêtes @Query en utilisant le langage JPQL,
5. Ecrire des requêtes @Query en passant des entités en
paramètre,
6. Interroger les produits selon l’id de leur catégorie,
7. Ajouter les méthodes du Repository à la couche Service.

Sonda AMMAR, Emna KALLEL 35


l’interface ProduitService
Une fois on a développé et tester les différentes méthodes ci-
dessus, on peut les ajouter à la couche service, en modifiant
l’interface ProduitService comme suit :
public interface ProduitService {
Produit saveProduit(Produit p);
Produit updateProduit(Produit p);
void deleteProduit(Produit p);
void deleteProduitById(Long id);
Produit getProduit(Long id);
List<Produit> getAllProduits();
List<Produit> findByNomProduit(String nom);
List<Produit> findByNomPrix (String nom, Double prix);
List<Produit> findByCategorie (Categorie categorie);
List<Produit> findByCategorieIdCat(Long id);
}
Sonda AMMAR, Emna KALLEL 36

Vous aimerez peut-être aussi