H2 est une base qui fonctionne en memoire : parfaite pour apprendre, aucune
installation. Nous passerons a MySQL plus loin.
2. Configurer la base
# H2 en memoire
spring.datasource.url=jdbc:h2:mem:ecole
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
La console H2 devient accessible sur http://localhost:8080/h2-console : tres pratique
pour voir ce qui est reellement enregistre.
L'option ddl-auto
Valeur
Effet
update
Cree et complete les tables sans effacer
create
Recree les tables a chaque demarrage
create-drop
Comme create, et supprime a l'arret
validate
Verifie seulement la correspondance
none
Ne touche a rien
Avertissement : ne jamais utiliser create ni
create-drop en production : vos donnees seraient effacees a chaque redemarrage. En
production, on utilise validate ou none.
@Query("SELECT e FROM Etudiant e WHERE e.moyenne >= :seuil ORDER BY e.moyenne DESC")
List<Etudiant> trouverAdmis(@Param("seuil") double seuil);
@Query(value = "SELECT * FROM etudiants WHERE moyenne > ?1", nativeQuery = true)
List<Etudiant> trouverAvecSqlNatif(double seuil);
JPQL porte sur les entites, pas sur les tables : on ecrit Etudiant
avec une majuscule, et e.moyenne, non le nom de la colonne.
7. Le service
@Service
@Transactional(readOnly = true)
public class EtudiantService {
private final EtudiantRepository repository;
public EtudiantService(EtudiantRepository repository) {
this.repository = repository;
}
public List<Etudiant> listerTous() {
return repository.findAll();
}
@Transactional
public Etudiant enregistrer(Etudiant e) {
return repository.save(e);
}
@Transactional
public void supprimer(Long id) {
repository.deleteById(id);
}
}
@Transactional garantit qu'une operation est entierement validee ou entierement
annulee. Le readOnly = true au niveau de la classe optimise les lectures ; on le surcharge
sur les methodes qui ecrivent.
Avec la dependance correspondante dans pom.xml. Le reste du code ne change pas d'une
ligne : c'est tout l'interet de JPA.
A retenir
@Entity relie une classe a une table
Une interface JpaRepository vide fournit deja le CRUD
Le nom de la methode suffit a generer la requete
ddl-auto=create efface tout : jamais en production
Exercices d'application
Exercice 1. Persister les etudiantsTransformez votre Etudiant en entite JPA, creez le repository et verifiez dans la console H2 que les donnees sont bien enregistrees.
Exercice 2. Requetes deriveesAjoutez trois methodes : chercher par matricule, lister ceux dont la moyenne depasse un seuil, et compter les admis. Testez chacune.
Exercice 3. Changer de basePassez de H2 a MySQL en ne modifiant que application.properties et pom.xml. Verifiez que le code Java reste inchange.
Cherchez avant de regarder la solution : c'est en butant sur les difficultes que l'on progresse.
Questions / Réponses
Aucune question. Soyez le premier à poser une question.