Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →