Bonjour ! Dans la leçon précédente, vous avez brillamment créé vos premiers endpoints REST avec Spring Boot. Vous savez maintenant comment exposer des données statiques, qu'il s'agisse de simples messages ou d'objets Java convertis automatiquement en JSON.
Aujourd'hui, nous allons rendre ces données dynamiques et persistantes. Nous allons connecter notre application à une véritable base de données. Pour ce faire, nous allons explorer le concept de mapping Objet-Relationnel (ORM) et apprendre à utiliser les annotations fondamentales de JPA (Jakarta Persistence API) pour transformer une simple classe Java en une "entité" que la base de données peut comprendre et gérer. C'est la première étape essentielle pour construire une API REST complète et fonctionnelle.
À la fin de cette leçon, vous saurez mapper une classe Java à une table de base de données en utilisant les annotations @Entity, @Id et @GeneratedValue.
1. Le Pont entre Java et la Base de Données : ORM et JPA
En tant que développeur, vous savez que le monde des objets Java (classes, attributs, héritage) est très différent du monde des bases de données relationnelles (tables, colonnes, clés étrangères). Le Mapping Objet-Relationnel (ORM) est une technique qui crée un pont, une sorte de traducteur automatique, entre ces deux mondes.
JPA (Java Persistence API), qui fait maintenant partie de la spécification Jakarta EE, est le standard en Java pour l'ORM. Il définit une API que les frameworks comme Hibernate (l'implémentation la plus populaire, utilisée par défaut dans Spring Boot) mettent en œuvre. Grâce à JPA, nous pouvons manipuler nos objets en Java, et le framework se charge de traduire ces opérations en requêtes SQL pour nous. Fini l'écriture manuelle de code JDBC répétitif !
62. JPA (Java Persistence API)
Ce document de J-M. Doudoux offre une excellente introduction à JPA.
Lisez l'introduction (les cinq premiers paragraphes) pour comprendre comment le mapping O/R (Objet/Relationnel) offre un niveau d'abstraction supérieur à JDBC et comment JPA standardise cette approche.
2. Les Annotations Clés pour le Mapping
Pour qu'une classe Java devienne une représentation d'une table de base de données, nous devons la décorer avec des annotations spécifiques qui guideront JPA.
@Entity
C'est l'annotation la plus importante. Elle signale à JPA que cette classe est une entité, ce qui signifie qu'elle doit être mappée à une table dans la base de données. Par défaut, le nom de la table sera le même que celui de la classe (par exemple, la classe Product sera mappée à une table Product).
On peut personnaliser le nom de la table avec l'annotation @Table(name = "products"), ce qui est une convention courante.
@Id
Chaque table de base de données doit avoir une clé primaire pour identifier de manière unique chaque enregistrement. L'annotation @Id se place sur le champ de la classe qui jouera ce rôle (par exemple, private Long id;). C'est obligatoire pour toute entité.
@GeneratedValue
Il est rare de vouloir gérer manuellement les valeurs des clés primaires. L'annotation @GeneratedValue indique à JPA que la valeur de la clé doit être générée automatiquement. Elle est souvent accompagnée d'une strategy.
GenerationType.IDENTITY: C'est la stratégie la plus courante avec MySQL. On délègue la génération de l'ID à la base de données elle-même (via une colonneAUTO_INCREMENT).GenerationType.SEQUENCE: Utilisée par des bases de données comme PostgreSQL ou Oracle.GenerationType.AUTO: Laisse Hibernate choisir la meilleure stratégie pour la base de données utilisée. C'est un bon choix par défaut, mais être explicite avecIDENTITYpour MySQL est souvent plus clair.


Pour une référence textuelle détaillée de ces annotations, vous pouvez consulter la ressource suivante.
62. JPA (Java Persistence API)
Cette section du document de Jean-Michel Doudoux détaille les annotations clés que nous venons de voir.
Concentrez-vous sur les descriptions des annotations @javax.persistence.Table, @javax.persistence.Id et @javax.persistence.GeneratedValue. Le texte fournit une explication claire de leurs rôles et de leurs attributs principaux.
3. Démonstration Pratique : Créer votre Première Entité
La théorie est claire, passons à la pratique. La vidéo suivante montre de manière très concrète comment annoter une classe pour en faire une entité JPA.
First Spring Boot App Spring Data JPA
La vidéo du Professeur Mohamed YOUSSFI est une excellente démonstration pratique. Nous allons voir comment transformer une classe Java simple en une entité JPA.
Regardez attentivement la section qui montre la création de l'entité. Observez comment la classe Product est annotée avec @Entity, @Id et @GeneratedValue(strategy = GenerationType.IDENTITY). C'est le cœur du mapping objet-relationnel. Notez aussi un détail important : les entités JPA doivent avoir un constructeur sans argument, que JPA utilise en interne pour créer des instances d'objets.
4. Configurer le Projet pour la Persistance
Avoir une entité ne suffit pas. Nous devons configurer notre projet Spring Boot pour qu'il sache :
- Qu'il doit gérer la persistance des données (via une dépendance Maven).
- Comment se connecter à notre base de données (via le fichier
application.properties).
La suite de la vidéo que vous venez de commencer explique ce processus de A à Z.
First Spring Boot App Spring Data JPA
Maintenant que l'entité est définie, il faut configurer notre projet pour qu'il puisse communiquer avec une base de données MySQL.
Regardez les deux sections suivantes : D'abord, la configuration des dépendances. Observez comment le driver MySQL (mysql-connector-j) est ajouté au fichier pom.xml, à côté de spring-boot-starter-data-jpa. Ensuite, la configuration de la connexion. Faites très attention aux propriétés ajoutées dans application.properties, notamment l'URL de la base de données, le nom d'utilisateur, le mot de passe, et la propriété spring.jpa.hibernate.ddl-auto=update. Cette dernière demande à Hibernate de créer ou mettre à jour les tables pour vous au démarrage de l'application, en se basant sur vos classes entités. C'est ce qui rend le développement si rapide !
Exercice Pratique
Il est temps de mettre les mains dans le code ! Reprenons l'exercice de la leçon précédente.
- Prenez la classe modèle
Bookque vous aviez créée. - Transformez-la en une entité JPA :
- Ajoutez l'annotation
@Entity. - Ajoutez un nouvel attribut
private Long id;et annotez-le avec@Idet@GeneratedValue(strategy = GenerationType.IDENTITY). - Assurez-vous que votre classe a un constructeur sans argument (vous pouvez l'ajouter manuellement ou, si vous n'avez aucun autre constructeur, Java le fournit par défaut).
- Ajoutez l'annotation
- Vérifiez votre fichier
pom.xmlet assurez-vous que les dépendancesspring-boot-starter-data-jpaetmysql-connector-jsont présentes. - Configurez votre fichier
src/main/resources/application.propertiesavec les informations de connexion à votre base de données MySQL locale. N'oubliez passpring.jpa.hibernate.ddl-auto=update.
Exemple de configuration :spring.datasource.url=jdbc:mysql://localhost:3306/votre_db_name?createDatabaseIfNotExist=true spring.datasource.username=root spring.datasource.password=votre_mot_de_passe spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true # Très utile pour voir les requêtes SQL générées par Hibernate - Créez le schéma de base de données (
votre_db_name) dans MySQL Workbench si ce n'est pas déjà fait. - Démarrez votre application Spring Boot.
- Vérifiez la console. Vous devriez voir les logs d'Hibernate qui crée la table
book. - Ouvrez MySQL Workbench, rafraîchissez votre schéma et confirmez que la table
booka été créée avec les colonnesid,isbn,title, etauthor.
Conclusion
Félicitations ! Vous avez réalisé le lien magique entre un objet Java et une table de base de données. C'est une compétence fondamentale pour tout développeur backend Java.
Les points clés à retenir :
- JPA est la spécification standard pour l'ORM en Java, et Hibernate est l'implémentation que Spring utilise par défaut.
- L'annotation
@Entitymarque une classe comme une table de base de données. - Le duo
@Idet@GeneratedValuedéfinit la clé primaire et sa stratégie de génération automatique. - La configuration se fait via la dépendance
spring-boot-starter-data-jpaet les propriétésspring.datasource.*dansapplication.properties. - La propriété
spring.jpa.hibernate.ddl-auto=updateest un outil puissant pour que votre schéma de base de données évolue avec votre code.
Maintenant que nous avons une entité mappée, comment interagir avec elle ? Comment sauvegarder un nouveau livre, en trouver un par son ID, ou les lister tous ?
Dans la prochaine leçon, nous découvrirons les Repository de Spring Data JPA. Vous verrez comment, en écrivant une simple interface, Spring nous fournit automatiquement toutes les méthodes nécessaires pour réaliser les opérations CRUD (Create, Read, Update, Delete), sans que nous ayons à écrire une seule ligne de code SQL.