Spring Boot : écrire le serveur (école d'ingénieur) · Chapitre 12 · Exercice de TD
Les ventes par rayon
Projet : l'API de la Librairie · niveau 2
Énoncé
Ajouter GET /api/admin/ventes, qui donne pour chaque rayon le nombre d'exemplaires vendus et le montant, calculés par la base (une seule requête, sans charger d'entité).
Corrigé
Une requête JPQL avec group by, qui construit directement des records (une projection, chapitre 5) :
/** Exercice 12.4 : ce qui s'est vendu dans un rayon. */
public record VenteParRayon(String rayon, Long exemplaires, BigDecimal montant) {
}
/** Exercice 12.4 : un calcul fait PAR LA BASE, sans charger une seule entité. */
@Query("""
select new fr.librairie.VenteParRayon(l.livre.rayon, sum(l.quantite), sum(l.prixUnitaire * l.quantite))
from LigneCommande l
group by l.livre.rayon
order by l.livre.rayon""")
List<VenteParRayon> ventesParRayon();
@GetMapping("/api/admin/ventes")
@Transactional(readOnly = true)
public List<VenteParRayon> ventes() {
return commandes.ventesParRayon();
}
sum d'entiers donne un Long, d'où le type du record. Le test commande deux Analyse MPSI à 45,00 € et lit 90.0 pour le rayon Mathématiques ; sans identifiants, l'adresse répond 401.
100 % gratuit
La suite du chapitre est sur Adloun
- 9 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.