Formation Java / Spring Boot pour développeur.euse.s COBOL
À l’issue de cette journée, vous serez capable :
Aujourd’hui, on ne découvre presque aucun nouveau concept, on réorganise intelligemment ce que vous savez déjà. Nous allons quand même installer et découvrir PostGreSQL et/ou MySQL.
Installation et découverte de PostgreSQL
Version de démonstration avec MySQL
Version mise à jour pour MySQL 8
Version de démonstration avec PostgreSQL
Exemple complet JDBC sans Hibernate ni Spring Boot avec PostgreSQL
En tenant utilisant l’une ou l’autre des versions ci-dessus, vous pouvez mettre en place le Design Pattern DAO avec un CRUD pour une table en base de données.
On sépare explicitement :
Pas pour compliquer les choses, mais pour maintenir, tester et faire évoluer notre application.
Une classe = une responsabilité principale
Ce principe est :
Main
com.banque ├── app (orchestration) ├── service (logique métier) ├── domain (objets métier) ├── dao (accès données) └── util (technique)
Cette structure sera quasi identique en Spring Boot.
public class BanqueApplication { public static void main(String[] args) { // orchestration uniquement } }
Compte
Client
Aucune dépendance technique
Exemple :
public class VirementService { public void virer(Compte source, Compte cible, BigDecimal montant) { source.debiter(montant); cible.crediter(montant); } }
Déjà vu avec CompteDAO
CompteDAO
main()
Ces erreurs sont très fréquentes lorsqu’on débute.
READ COMPTE IF SOLDE < MONTANT MOVE "KO" TO CODE-RETOUR ELSE SUBTRACT MONTANT FROM SOLDE WRITE COMPTE END-IF
Tout est mélangé :
if (compte.getSolde().compareTo(montant) < 0) { System.out.println("Erreur"); } else { compte.setSolde(compte.getSolde().subtract(montant)); dao.save(compte); }
Mauvaise version :
public void debiter(BigDecimal montant) { if (solde.compareTo(montant) < 0) { throw new DebitInterditException("Solde insuffisant"); } solde = solde.subtract(montant); }
public class CompteService { private CompteDAO dao; public CompteService(CompteDAO dao) { this.dao = dao; } public void debiterCompte(String numero, BigDecimal montant) { Compte compte = dao.trouverParNumero(numero); compte.debiter(montant); dao.sauvegarder(compte); } }
try { service.debiterCompte("FR001", new BigDecimal("200")); } catch (DebitInterditException e) { System.out.println(e.getMessage()); }
✔ règles métier dans les objets ✔ orchestration claire ✔ accès données isolé ✔ code testable ✔ évolution facilitée
C’est exactement ce qu’attend une équipe Java.
Consignes : reprendre un ancien TP des semaines 1 ou 2
Consigne :
Parce que :
Si l’architecture est mauvaise, Spring amplifie les problèmes.
À ce stade, un projet est :
Vous savez maintenant :
Cette journée est fondamentale pour la réussite de la suite…
On abordera :
```