Spring Boot 3 - POST service et JPA
On va montrer comment implanter un CRUD en Spring Boot avec JPA et une couche de service.
Le code de cette recette est disponible ici.
- Initialiser le projet
- Modèle de données
- Base de données
- Repository
- Classe de service
- Contrôleur
- Tests
Voici les choix que nous recommandons:
- Langage : Java
- Système de build : Gradle Kotlin
- Version de Spring Boot : 3.4.1
- packaging : Jar
- version de java 17
- Metadata
- Group : org.nomprenom
- Artifact : serveur-avec-bd
- Name : serveur-avec-bd
- ajouter dans dependencies:
- Spring Web
- Spring Data JPA
- H2 Database
En cliquant sur "Generate", tu vas télécharger un fichier zip qui contient ton projet.
On va commencer par le modèle de données:
- on se donne une classe Truc
- chaque truc contient un id et un champ texte appelé chose:
Chargement...
Spring permet d'utiliser un fichier de propriétés pour fournir la configuration de la base de données:
- il y a un format de fichier spécifique
- le fichier se trouve dans le dossier resources
On a les infos suivantes:
- la base de données est H2
- on a le chemin du fichier de la BD
Nous allons ensuite avoir un repository pour accéder à la base de données. Il s'agit d'un objet qui fournit des opérations dans la BD.
On appelle cela parfois également un Data Access Object ou encore DAO (comme dans la librairie du TP3 de 3N5)
Dans notre application on souhaite proposer uniquement 2 opérations aux utilisateurs:
- ajouter un truc en validant qu'il n'y a pas déjà un truc avec le même chose
- accéder à la liste des trucs
Chargement...
Les éléments importants ici pour Spring Boot:
- le JpaRepository est une interface qui fournit toutes les méthodes CRUD de base
- on peut ajouter des méthodes juste en les déclarant dans l'interface (Spring Boot va les implémenter par magie)
- par exemple, findByChose est une méthode qui va chercher un truc par son champ chose
Dans notre application on souhaite proposer uniquement 2 opérations aux utilisateurs:
- ajouter un truc en validant qu'il n'y a pas déjà un truc avec le même chose
- accéder à la liste des trucs
Chargement...
Les éléments importants ici pour Spring Boot:
- l'annotation @Service sur la classe indique à Spring Boot qu'il s'agit d'un composant injectable
- l'annotation @Autowired sur le repository indique à Spring Boot de fournir un objet de type TrucRepo
- l'objet dont le service est dépendant est injecté par Spring au lieu d'avoir à faire un new TrucRepo
- on parle d'injection de dépendance
On va maintenant pouvoir appeler notre service depuis notre contrôleur
Les éléments importants ici pour Spring Boot:
- on a pu injecter notre service directement dans le contrôleur
- on voit qu'on peut exposer la même méthode de service avec plusieurs méthodes HTT
On va voir comment écrire des tests pour notre couche de service dans notre code
Les éléments importants ici pour Spring Boot:
- on peut aussi injecter notre service dans les tests, chouette
- on doit partir une instance de Spring Boot avec l'annotation @SpringBootTest cela donne par exemple le contexte pour l'injection de dépendance
- on veut tester sur une base de données qui n'est pas celle du système, ici on fournit un autre fichier de propriétés avec une BD en mémoire vive: