Vous êtes sur la page 1sur 14

PROGRAMMATION DES

APPLICATIONS RÉSEAUX

ETUDE DES CAS

Lorince TAWAMBA
Cloud Software Engineer
Enseignant chercheur

Courriel : lorince.tawamba@gmail.com

GitHub : https://github.com/LorinceTawamba
Etude de cas 1 : Système de gestion des adresses de clients

Mots clés : JPA, Hibernate.

1. Énoncé

Une entreprise de la place souhaite via son application gérer les


adresses de ses clients.
Le client est caractérisé par les éléments suivants : son identifiant, son
nom, son prénom, son email, son téléphone, et son adresse.
L’adresse du client est caractérisée par les éléments suivants : son
identifiant, son pays, sa ville, sa rue et son numéro de rue.

2. Recommandations

La solution à mettre sur pied doit utiliser l’ORM pour assurer la


persistance des données.

3. Fonctionnalités attendues

L’utilisateur doit pouvoir :


■ Pour les adresses :
➢ Créer une nouvelle adresse
➢ Consulter le détail d’une adresse existante
➢ Modifier le détail d’une adresse existante
➢ Supprimer une adresse existante
➢ Afficher la liste des adresses existante
■ Pour les clients :
➢ Créer un nouveau client
➢ Consulter le détail d’un client existant
➢ Modifier le détail d’un client existant
➢ Supprimer un client existant
➢ Afficher la liste des clients existants
4. Résolution du problème

■ Modélisation de la BD :

■ Créer un nouveau projet pour l’application


Pour implémenter le JPA, nous allons utiliser Hibernate. Un des
framework qui impément Hibernate s’appelle Spring Boot.
Nous allons donc travailler avec Spring boot. Il est disponible sur le site
start.spring.io ou aussi à partir de notre IDE.
Pour créer notre projet, nous avons besoin de travailler avec des
éléments préalablement configuré ces éléments s’appelle des
Dépendances.
Pour ce projet, nous avons besoin des dépendances suivantes :
- Spring Web : Build web, including RESTful, applications using
Spring MVC. Uses Apache Tomcat as the default embedded
container.
- MySQL Driver SQL : MySQL JDBC and R2DBC driver.
- Spring Data JPA : Persist data in SQL stores with Java
Persistence API using Spring Data and Hibernate.
- Rest Repositories : Exposing Spring Data repositories over REST
via Spring Data REST.
- Spring Boot DevTools : Provides fast application restarts,
LiveReload, and configurations for enhanced development
experience.
- Lombok : Java annotation library which helps to reduce
boilerplate code.
■ Faire les différentes configuration du projet
Les configurations se font dans le fichier application.properties ou
application.yml.
Notre configuration va permettre au serveur d’application de :
- Connaitre sur quel port démarrer
- Connaitre le nom de l’application à héberger
- Connaitre ou se trouve la base de données et comment y acceder
Nous allons utiliser les configurations suivantes :

application.properties

# ===============================
# SERVEUR
# ===============================
server.port = 9091
spring.application.name = GESTION-ADRESSE

# ===============================
# DATABASE
# ===============================
spring.datasource.url =
jdbc:mysql://127.0.0.1:3306/delasalle?useLegacyDatetimeCode=fa
lse&serverTimezone=Africa/Douala&zeroDateTimeBehavior=convertT
oNull&createDatabaseIfNotExist=true&autoReconnect=true&useSSL=
false
spring.datasource.username = root
spring.datasource.password = 12345

# ===============================
# JPA / HIBERNATE
# ===============================
spring.jpa.show-sql=true
# Hibernate ddl auto (none, create, create-drop, update)
spring.jpa.hibernate.ddl-auto=update
# The SQL dialect makes Hibernate generate better SQL for the
chosen database
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.
MySQL5InnoDBDialect

NB: Nous pouvons exécuter pour voir le rendu de l’application (création


de la BD si non existante, demarage de l’application sur le port 9091).

■ Créer les entités de l’application


Chaque entité dans l’application Java va correspondre à une table ou
relation dans la base de données. Toutes les entités vont être créée
dans le package entities.
- Créer la classe Address avec ses attibuts.

Address.java

// package
package org.delasalle.rsi4.entities;

// librairies
import java.util.UUID;

/**
* Modèle Address
* @author Lorince TAWAMBA
* @version 0.0.1
* @since 30/11/2022
*/
public class Address {
private UUID addressId;
private String country;
private String city;
private Integer cityCode;
private String streetAndBuildingName;
private String streetAndBuildingNumber;
private String apartmentNumber;
}

- Transformer la classe Address en entité avec toutes ses


configurations.

Pour cela, vous allez utiliser les différentes anotaions ci-dessous :


○ @Entity
○ @Table(name = "adresse")
○ @Data
○ @AllArgsConstructor
○ @NoArgsConstructor
○ @Id
○ @GeneratedValue(strategy = GenerationType.IDENTITY)
○ @Column(name, unique, nullable)

// package
package org.delasalle.rsi4.entities;

// librairies
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.util.UUID;

/**
* Modèle Address
* @author Lorince TAWAMBA
* @version 0.0.1
* @since 30/11/2022
*/
@Entity
@Table(name = "tb_address")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Address {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "address_id", nullable = false, updatable =
false, columnDefinition = "BINARY(16)")
// @Type(type="org.hibernate.type.UUIDCharType") ou
columnDefinition = "BINARY(16)
// Universally unique identifier (UUID)
private UUID addressId;

@Column (name = "country", nullable = false, updatable =


true, columnDefinition = "VARCHAR(100)")
private String country;

@Column (name = "city", nullable = false, updatable = true,


columnDefinition = "VARCHAR(100)")
private String city;

@Column (name = "city_code", nullable = false, updatable =


true, columnDefinition = "integer default 0")
private int cityCode;

@Column (name = "street_and_building_name", nullable =


true, updatable = true, columnDefinition = "VARCHAR(100)")
private String streetAndBuildingName;

@Column (name = "street_and_building_number", nullable =


true, updatable = true, columnDefinition = "VARCHAR(100)")
private String streetAndBuildingNumber;

@Column (name = "apartment_number", nullable = true,


updatable = true, columnDefinition = "VARCHAR(100)")
private String apartmentNumber;
}

NB: Nous pouvons exécuter pour voir le rendu de l’application (création


de la table dans la BD si non existante).

- Créer l’interface d’exposition du REST Full.


Toutes les interfaces d’exposition du REST Full dans l’application vont
être créée dans le package repositories.
AddressRepository.java

// package
package org.delasalle.rsi4.repositories;

import org.delasalle.rsi4.entities.Address;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.UUID;

/**
* Rest AddressRepository
* @author Lorince TAWAMBA
* @version 0.0.1
* @since 30/11/2022
*/
public interface AddressRepository extends
JpaRepository<Address, UUID> {
}
- Créer les différents services d’implémentation de la logique métier
de l’application.
Toutes les services de l’application sont réalisé en deux temps :
➔ L’interface d’exposition du service
➔ La classe d’implémentation du service

Les services sont placé dans le package services et dans le sous


package impl.

○ @Entity
○ @Table(name = "adresse")
○ @Data
○ @AllArgsConstructor
○ @NoArgsConstructor
○ @Id
○ @GeneratedValue(strategy = GenerationType.IDENTITY)
○ @Column(name, unique, nullable)

■ Créer les controlleurs

@RequestMapping("api/v1/adresse")

@PostMapping(path = "/save")

@GetMapping(path = "/get-by-id")

@GetMapping(path = "/get-all-adresses")

@UpdateMapping(path = "/update")

@PatchMapping(path = "/update")

@DeleteMapping(path = "/delete")

Vous aimerez peut-être aussi