/Gestion_Hopital_Spring

se case JPA, Hibernate Spring Data, One To Many, One To One.

Primary LanguageJava

Rapport de Projet Hospital Project

Introduction

Ce rapport se concentre sur le projet "Hospital Project", une application de gestion hospitalière élaborée pour démontrer divers concepts de développement logiciel, de gestion de données et de création d'API REST en utilisant le framework Spring Boot. Il explore en détail les différentes composantes du projet, notamment sa conception, sa structure et l'utilisation d'annotations essentielles pour configurer et gérer les entités, les repositories et les contrôleurs REST. De plus, il offre une vue approfondie sur la configuration de la base de données H2 en mémoire, ainsi que sur l'établissement des relations entre les entités du projet.

L'objectif principal de ce rapport est de présenter une analyse complète du projet "Hospital Project", en mettant en avant les concepts et les techniques clés employés tout au long de son développement.

Conception du Projet

Conception

Structure du Projet

Le projet "Hospital Project" est organisé en plusieurs packages et comprend les éléments suivants :

  1. hospitalProject.entities : Ce package contient les classes qui représentent les entités du projet.
    • Patient : Cette classe représente les patients de l'hôpital. Elle comprend des informations telles que le nom du patient, sa date de naissance, son état de maladie et une relation vers les rendez-vous associés.
    • Medecin : Cette classe représente les médecins travaillant à l'hôpital. Elle inclut des informations telles que le nom du médecin, son adresse e-mail, sa spécialité (cardiologue ou dentiste) et une relation vers les rendez-vous associés.
    • RendezVous : Cette classe représente les rendez-vous entre les patients et les médecins. Elle comprend des informations sur la date du rendez-vous, son statut (en attente, annulé ou effectué), ainsi que des relations vers le patient, le médecin et la consultation associée.
    • Consultation : La classe Consultation est liée à un rendez-vous et contient des informations sur la date de la consultation et un rapport médical.
  2. hospitalProject.repositories : Ce package contient les interfaces de gestion des données pour chaque entité, utilisant Spring Data JPA pour effectuer les opérations de base.
  3. hospitalProject.service : Ce package contient l'interface IHospitalService et son implémentation HospitalServiceImpl. L'interface définit des méthodes pour sauvegarder des patients, des médecins, des rendez-vous, et des consultations. L'implémentation utilise les repositories pour gérer les entités et crée des relations entre elles.
  4. hospitalProject.web : Ce package contient le contrôleur PatientRestController, qui expose une API REST pour récupérer la liste des patients.

Utilisation des Annotations

Les annotations sont largement utilisées dans le projet pour configurer les entités, les repositories, et les contrôleurs REST. Voici un résumé des annotations clés et de leur utilité :

  1. Annotations liées aux entités :
    • @Entity : Marque les classes comme des entités persistantes, mappées sur des tables de base de données.
    • @Id : Définit un champ comme la clé primaire de l'entité.
    • @GeneratedValue(strategy = GenerationType.IDENTITY) : Définit la stratégie de génération des valeurs de la clé primaire, indiquant que la base de données génère automatiquement les valeurs.
    • @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) : Contrôle la sérialisation JSON des entités en excluant certains champs de la réponse JSON.
    • @Enumerated(EnumType.STRING) : Utilisée pour stocker les valeurs d'une énumération sous forme de chaînes de caractères dans la base de données, ce qui facilite la lisibilité des données.
    • @AllArgsConstructor: Cette annotation est généralement associée au framework Lombok. Elle génère automatiquement un constructeur qui prend tous les champs de la classe en tant que paramètres. Cela simplifie la création d'instances de la classe en évitant d'écrire manuellement un constructeur avec de nombreux paramètres.
    • @NoArgsConstructor: Cette annotation, également associée à Lombok, génère un constructeur sans aucun paramètre. Cela permet de créer des instances de la classe sans avoir à spécifier de valeurs pour les champs. Ces constructeurs sont couramment utilisés dans les classes d'entités pour permettre la création d'instances vides.
    • @Data: Cette annotation de Lombok génère automatiquement des méthodes getter, setter, equals(), hashCode(), et toString() pour tous les champs de la classe. Cela réduit considérablement le code boilerplate en évitant d'écrire manuellement ces méthodes. L'annotation @Data simplifie la gestion des entités en automatisant la génération de ces méthodes essentielles.
  2. Annotations liées aux repositories :
    • @Repository : Indique que la classe est un composant de persistance Spring, activant la création automatique d'une implémentation de l'interface par Spring Data JPA.
    • JpaRepository : L'interface fournit des méthodes de base pour effectuer des opérations de CRUD sur l'entité correspondante.
  3. Annotations liées aux services :
    • @Service :Cette annotation est utilisée pour indiquer que la classe est un composant de service Spring. Elle permet à Spring de détecter automatiquement cette classe lors de la configuration de l'application. Dans ce contexte, HospitalServiceImpl est marqué comme un service, ce qui signifie qu'il contient la logique métier de l'application.
    • @Transactional: Cette annotation est utilisée pour indiquer que les méthodes de cette classe sont transactionnelles. Elle permet de gérer les transactions de base de données. Lorsqu'une méthode annotée avec @Transactional est appelée, une transaction est créée, et en cas d'exception, la transaction est annulée, assurant la cohérence des données. Cela garantit que les opérations de base de données sont atomiques.
  4. Annotations liées aux contrôleurs REST :
    • @RestController : Marque les classes comme des contrôleurs REST, permettant d'exposer des points d'API HTTP.
    • @GetMapping : Définit les méthodes comme des gestionnaires de requêtes HTTP GET pour des chemins d'URL spécifiques.
    • @Autowired : Utilisée pour injecter automatiquement les dépendances, permettant d'accéder aux ressources nécessaires, comme les repositories, dans les contrôleurs.
  5. Annotation @Bean pour la Configuration des Beans :
    • @Bean : Utilisée pour créer un bean personnalisé de type CommandLineRunner, gérant des dépendances, personnalisant le comportement du démarrage de l'application, centralisant la configuration, et exécutant des tâches spécifiques au lancement de l'application.

Configuration de la Base de Données

Dans ce projet, une base de données H2 en mémoire est utilisée, et sa configuration est effectuée dans le fichier `application.properties`. La base de données est accessible via la console H2 avec le paramètre `spring.h2.console.enabled` activé. Cela permet une gestion aisée de la base de données et offre la possibilité d'interagir avec les données stockées dans l'application.

    Patient

    Pour créer un patient, on crée une instance de la classe Patient, on lui attribue les informations nécessaires, puis on utilise la méthode savePatient de l'interface IHospitalService pour le sauvegarder. Les patients sont associés aux rendez-vous via une relation OneToMany.

    Patient

    Medecin

    Pour créer un médecin, on crée une instance de la classe Medecin, on lui attribue les informations nécessaires, puis on utilise la méthode saveMedecin de l'interface IHospitalService pour le sauvegarder. Les médecins sont également associés aux rendez-vous via une relation OneToMany.

    Médecin

    Rendez-vous

    La création d'un rendez-vous nécessite la définition de la date, du statut, du patient et du médecin correspondant. On utilise la méthode saveRendezVous pour sauvegarder le rendez-vous. Les rendez-vous sont liés aux patients et aux médecins via des relations ManyToOne.

    Rendez'vous

    Consultation

    Pour enregistrer une consultation, on crée une instance de la classe Consultation, on attribue la date et le rapport, puis on utilise la méthode saveConsultation de l'interface IHospitalService. La consultation est associée à un rendez-vous via une relation OneToOne.

    Consultation

    Affichage de l'ID du Rendez-vous

    L'ID du rendez-vous récemment sauvegardé peut être affiché en imprimant la valeur de patient1.getId(). Cette expression permet d'obtenir l'identifiant attribué au rendez-vous lors de son enregistrement dans la base de données.

    idRDV

Conclusion

En résumé, le projet "Hospital Project" constitue une démonstration réussie de la puissance de Spring Boot pour simplifier le développement d'applications Java. L'exploration de sa conception, de sa structure et de l'utilisation des annotations nous a permis de comprendre de nombreux aspects cruciaux liés à la création d'applications professionnelles.

La configuration de la base de données H2 en mémoire a facilité le stockage et la gestion efficaces des données tout au long du projet. De plus, la mise en place des relations entre les entités a illustré comment Spring Data JPA simplifie l'établissement de connexions entre les différentes entités.

Enfin, l'exposition d'une API REST pour la gestion des patients a démontré comment Spring Boot facilite le développement de points d'accès HTTP tout en permettant le renvoi de données au format JSON, favorisant ainsi une intégration transparente avec d'autres systèmes.