Nous devons installer les extensions suivantes (en plus de celles pour Java) pour Visual Studio Code:
- Spring Boot Extension Pack (Spring Boot Tools, Spring Initialzr Java Support, Spring Boot Dashboard)
- Spring Boot Support
- Thymeleaf Snippets
- Lombok Annotations Support for VS Code
-
Fermer votre workspace de Visual Studio Code et cliquer sur Create Java project
-
Vous aurez ensuite les choix suivants:
Sélectionnez Spring Boot > Maven Project > 2.7.3 > Java
Ensuite l'initialisateur Spring Boot nous demandera de spécifier un nom de package pour notre projet (Group Id) - exemple
com.julexmile
Ensuite il nous demandera de spécifier un Artifact Id (le nom du projet) exempleexemplejpa
Nous devons ensuite sélectionner entre un JAR et un WAR pour le packaging type de notre exécutable. Nous allons sélectionner JAR car nous allons utiliser le templating engine Thymeleaf.
Nous allons choisir la version 11 de Java
Ensuite nous arrivons aux choix des "starter dependencies" de notre projet Spring Boot
Choississons:
- Spring Boot DevTools (utilitaires facilitant le développement d'une application Spring)
- Spring Web (contient Spring MVC et les librairies utiles pour le développement d'un site web)
- Lombok (Librairie utile pour la génération des getters/setters/constructeurs/Slf4j)
- Thymeleaf (Le templating engine que nous allons utilisé, ressemble un peu à JSTL dans un JSP mais plus étendu)
- JDBC API, Spring Data JPA, Spring Data JDBC
- Oracle Driver puisque nous allons utiliser une base de données Oracle 11
Ensuite il nous demande de sélectionner le chemin du dossier où nous sauvegarderons notre projet
Nous pouvons ensuite l'ouvrir en cliquant sur Open
Remplacez le application.properties dans src/main/resources pour application.yml contenant votre configuration SQL, ex: (Faites bien attention l'indentation détermine la hiérarchie des propriétés dans un fichier YAML)
spring:
jpa:
database-platform: org.hibernate.dialect.Oracle9Dialect
hibernate:
ddl-auto: create
datasource:
url: jdbc:oracle:thin:@//localhost:1521/xe
username: HR
password: HR
driver-class-name: oracle.jdbc.driver.OracleDriver
logging:
level:
'[org.hibernate.SQL]': DEBUG
'[orb.hibernate.type.descriptor.sql.BasicBinder]': TRACE
- Créez un dossier modèle dans src/main/java/com/julexmile/exemplejpa/
- Créez un fichier Docteur.java
@Data
@Entity
@NoArgsConstructor
@AllArgsConstructor
public class Docteur {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "gen_doctor")
@SequenceGenerator(name = "gen_doctor", sequenceName = "SEQ_DOCTOR", allocationSize = 1)
private Long id;
private String firstName;
private String lastName;
private String city;
}
L'annotation @Data dit à Lombok de créer les getters et les setters pour tout les attributs de l'entité. @NoArgsConstructor lui dit de créer un constructeur vide et @AllArgsConstructor pour le constructeur contenant tout les attributs.
Nous feront également un constructeur sans id :
public Docteur(String firstName, String lastName, String city) {
this.firstName = firstName;
this.lastName = lastName;
this.city = city;
}
- Créez un dossier data dans src/main/java/com/julexmile/exemplejpa/
- Crééz une interface DocteurRepository
public interface DocteurRepository extends CrudRepository<Docteur, Long> {
Docteur findByUsername(String username);
}
-
Cette interface implémente les opérations courantes d'un CRUD automatiquement en héritant de CrudRepository tels que:
- Docteur findById()
- Iterable findAll()
- les delete, save, etc.
Par défaut, il les génère toutes pour le @Id
Nous pouvons également vouloir spécifier des méthodes custom en utilisant une formulation camel-case (attention vos attributs d'entités doivent être en CamelCase ou cela pourrait mener à des problèmes dans la compréhension du Crud Repository de Spring Data JPA pour l'implémentation des méthodes).
Nous aurons besoin de 4 controllers soit :
- MenuController.java : redirige
localhost:8080/
vers le template représentant le menu de base - DocteurListController.java : Permet l'affichage des docteurs à l'adresse
localhost:8080/docteurlist
. Prend également des paramètres optionnels dans l'URL soit act (modify ou delete) et user pour savoir sur quelle entité effectuer l'action. - AddDoctorController.java : Ajoute un docteur à l'aide des données du formulaire dans ajoutdocteur.html et redirige vers la liste
- ModifyDoctorController.java : Modifie un docteur à l'aide des donnée du formulaire dans modifydocteur.html
- Dans notre programme, les controlleurs renvoient des String du même nom qu'une vue Thymeleaf, les données y sont rendues disponibles par l'ajout d'objet nommés dans la modèle.
- Les données issues d'un formulaire ou les paramètres optionnels correspondant aux actions modify et delete sont accédées grâce à l'annotation @RequestParam
- Le templating engine Thymeleaf permet de nombreuses opérations (des boucles, accès aux données, conditionnels etc.) à celles présentes dans JSTL
- Après l'avoir roulé une fois et avoir créé le modèle de données et populé votre database vous pouvez changer ddl-auto dans le fichier application.yml de create vers update.