0% ont trouvé ce document utile (0 vote)
38 vues10 pages

Atelier 3 Spring Boot

Transféré par

rahmajmalr.jmal
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
38 vues10 pages

Atelier 3 Spring Boot

Transféré par

rahmajmalr.jmal
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

objectifs

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


Atelier 3 Spring boot 2. Utilisation de Lombok,
Persister et interroger les données avec 3. Interroger les entités en fournissant un attribut non clé,
Spring Data JPA 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,
Emna KALLEL 7. Ajouter les méthodes du Repository à la couche Service.

[email protected]
Emna KALLEL 2

Créer une association OneToMany


objectifs
entre deux entités,
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.

Emna KALLEL 3 Emna KALLEL 4


Créer l’entité catégorie Categorie.java: Définition des arguments
1. Sachant qu’un produit possède une et une seule catégorie, et une @Entity
catégoriecontient plusieurs produits. Créer, L’entité Categorie : public class Categorie {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idCat;
private String nomCat;
private String descriptionCat; Le même nom que l’attribut de l’entité
Produit

@OneToMany(mappedBy = "categorie")
private List<Produit> produits;
}
• Ajouter ensuite les getters et les setters, les constructeurs et
toString
Emna KALLEL 5 Emna KALLEL 6

Produit.java: ajouter l’attribut categorie Console

@ManyToOne optionnel
private Categorie categorie;

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


apach de Xamp sont déjà lancé)

Emna KALLEL 7 Emna KALLEL 8


phpMyAdmin 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,
Clé étrangère
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.

Emna KALLEL 9 Emna KALLEL 10

UtilisationdeLombok Installation de Lombok


• Télécharger Lombok.jar à partir de :
• Lombok est une bibliothèque java permettant de https://projectlombok.org/download puis exécuter le
simplifier le code des entités en épargnant au • Spécifier l’emplacement de l’exécutable de votre IDE :
SpringToolSuite4.exe puis appuyer sur install.
développeur l’écriture des méthodes getters, setters,
equals,…
• Lombok injecte automatiquement ces méthodes dans
le byte code lors de la compilation.

• Rédemarrer votre ordinateur


Emna KALLEL 11 Emna KALLEL 12
Configuration du fichier pom.xml Modifier la classe Categorie
@Data
• Ajouter au fichier pom.xml ces dépendances
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Categorie {
<dependency> @Id
<groupId>org.projectlombok</groupId> @GeneratedValue(strategy = GenerationType.IDENTITY)
<artifactId>lombok</artifactId> private Long idCat;
</dependency> private String nomCat;
private String descriptionCat;

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

Emna KALLEL 13 Emna KALLEL 14

L’injection automatique des méthodes objectifs


Dans Outline (windowshow viewoutline ) vous remarquez l’ajout des
différents objets 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.

Emna KALLEL 15 Emna KALLEL 16


Interroger les entités en fournissant
L’interface ProduitRepository
un attribut non clé,
• Si on veut chercher selon le nom du produit on modifie
• Pour chercher un produit on a utilisé dans l’interface ProduitRepository comme suit:
l’atelier précédent la méthode findById(id) en
public interface ProduitRepository extends JpaRepository<Produit, Long>
lui donnant comme l’identifiant du produit {

• On se propose à présent de créer les méthodes List<Produit> findByNomProduit(String nom);


nécessaires pour interroger les données des Le même nom que l’attribut de l’entité
} Produit
produits en fournissant le nom du produit
comme critère de recherche. • Par convention le nom de la méthode doit commencé par
findBy suivi par le nom le l’attribut de la classe entité avec un
majuscule dans la première lettre.

Emna KALLEL 17 Emna KALLEL 18

Modifier ProduitsApplicationTests
Exécution avec junit
• Tester la méthode findByNomProduit en ajoutant la méthode
testFindByNomProduit à la classe ProduitsApplicationTests
@Test
public void testFindByNomProduit()
{
List<Produit> prods = produitRepository.findByNomProduit();
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
Emna KALLEL 19 Emna KALLEL 20
Interroger les entités en fournissant
objectifs
plusieurs critères,
1. Créer une association OneToMany entre deux entités, • On se propose à présent de créer les méthodes
2. Utilisation de Lombok, nécessaires pour interroger les données des
3. Interroger les entités en fournissant un attribut non clé, produits en fournissant plusieurs critères de
recherche.
4. Ecrire des requêtes @Query en utilisant le langage JPQL,
• Pour ce faire on va utiliser l’annotation @Query
5. Ecrire des requêtes @Query en passant des entités en
et le langage JPQL(JPA Query Langage).
paramètre,
6. Interroger les produits selon l’id de leur catégorie,
7. Ajouter les méthodes du Repository à la couche Service.

Emna KALLEL 21 Emna KALLEL 22

Modifier ProduitsApplicationTests
Modifier l’interface ProduitRepository
• Tester la méthode testfindByNomPrix en ajoutant la méthode
• Créer la méthode findByNomPrix dans testfindByNomPrix à la classe ProduitsApplicationTests
l’interface ProduitRepository, qui retourne les
@Test
produits dont le nom contient un texte donné public void testfindByNomPrix()
{
et le prix est supérieur à une valeur donnée List<Produit> prods = produitRepository.findByNomPrix("dell",
Le même nom que l’attribut de l’entité
1000.0);
Produit
for (Produit p : prods)
{
@Query("select p from Produit p where p.nomProduit like %?1 and
System.out.println(p);
p.prixProduit > ?2")
}
List<Produit> findByNomPrix (String nom, Double prix);
}

Emna KALLEL 23 Emna KALLEL 24


Exécution avec junit 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.

Emna KALLEL 25 Emna KALLEL 26

récupérer les produits qui ont une Modifier ProduitsApplicationTests


catégorie donnée
Tester la méthode findByCategorie en ajoutant la méthode
• Créer la méthode findByCategorie dans l’interface testFindByCategorie à la classe ProduitsApplicationTests
ProduitRepository, qui retourne les produits ayant une
catégorie donnée : @Test
public void testfindByCategorie()
{
@Query("select p from Produit p where p.categorie = ?1") Categorie cat = new Categorie();
List<Produit> findByCategorie (Categorie categorie); cat.setIdCat(1L); //afficher les produits de catégorie 1
List<Produit> prods = produitRepository.findByCategorie(cat);
for (Produit p : prods)
{
System.out.println(p);
}
}

Emna KALLEL 27 Emna KALLEL 28


Insertion du donnée via phpMyAdmin Exécution avec junit

Emna KALLEL 29 Emna KALLEL 30

récupérer les produits qui ont une


objectifs
catégorie donnée
1. Créer une association OneToMany entre deux entités, • Créer la méthode findByCategorieIdCat dans l’interface
2. Utilisation de Lombok, ProduitRepository, qui retourne les produits ayant une
3. Interroger les entités en fournissant un attribut non clé, catégorie donnée, en fournissant l’id de la catégorie:
4. Ecrire des requêtes @Query en utilisant le langage JPQL,
List<Produit> findByCategorieIdCat(Long id);
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.

Emna KALLEL 31 Emna KALLEL 32


Modifier ProduitsApplicationTests
Exécution avec junit
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);
}
}

Emna KALLEL 33 Emna KALLEL 34

l’interface ProduitService
objectifs
Une fois on a développé et tester les différentes méthodes ci-
1. Créer une association OneToMany entre deux entités,
dessus, on peut les ajouter à la couche service, en modifiant
2. Utilisation de Lombok, l’interface ProduitService comme suit :
3. Interroger les entités en fournissant un attribut non clé,
public interface ProduitService {
4. Ecrire des requêtes @Query en utilisant le langage JPQL, Produit saveProduit(Produit p);
Produit updateProduit(Produit p);
5. Ecrire des requêtes @Query en passant des entités en void deleteProduit(Produit p);
void deleteProduitById(Long id);
paramètre, Produit getProduit(Long id);
6. Interroger les produits selon l’id de leur catégorie, List<Produit> getAllProduits();
List<Produit> findByNomProduit(String nom);
7. Ajouter les méthodes du Repository à la couche Service. List<Produit> findByNomPrix (String nom, Double prix);
List<Produit> findByCategorie (Categorie categorie);
List<Produit> findByCategorieIdCat(Long id);
}
Emna KALLEL 35 Emna KALLEL 36
la classe ProduitServiceImpl
• Puis en implémentant ces méthodes dans la classe
ProduitServiceImpl :
@Override
public List<Produit> findByNomProduit(String nom) {
return produitRepository.findByNomProduit(nom);
}
@Override
public List<Produit> findByNomPrix(String nom, Double prix) {
return produitRepository.findByNomPrix(nom, prix);}
@Override
public List<Produit> findByCategorie(Categorie categorie) {
return produitRepository.findByCategorie(categorie);}
@Override
public List<Produit> findByCategorieIdCat(Long id) {
return produitRepository.findByCategorieIdCat(id);}

Emna KALLEL 37

Vous aimerez peut-être aussi