Aller au contenu

Démo Génération des Entities avec Eclispe depuis une BD MySQL

Objectif : Générer des Entities depuis une base de données existantes nommées Concession (nombreuses tables et relations variées) puis récupérer le model pour l’utiliser dans une appication Spring Boot.

Les étapes dans Eclipse :

Exemple du schèma de la BD avec les tables que nous allons récupérer dans un projet JPA

bd concession dans MySQL

Création BD Concession

Fichier concession.sql à télécharger et exécuter dans votre DataBD concession sous MySQL.

1. Data Source Eplorer

Liste des paramètres :

Click droit sur Database Connections

Data Source Explorer

New…

New Connection

Choisir MySQL

Eventuellement, changer le nom de la connection.

Data Source Explorer

Click sur le bouton Add JAR/Zip…

Cela permet d’ajouter un pilote récent si besoin (optionnel).

Data Source Explorer

Valider le choix du pilote MySQL

Data Source Explorer

Ajouter 2 propriétés en allant sur Optionnal

serverTimezone=CET
useSSL=false

Data Source Explorer

Tester la connection Ping succeeded!

Data Source Explorer

2. Projet JPA Project

On ne va pas utiliser EclipseLink, juste le mode Généric d’Eclipse. Voici un fichier JAR à télécharger et mettre dans la librairie du projet JPA.

Télécharger javax.persistence-api-2.2.jar

Créer un New JPA Project

projet jpa01

Choisissez JPA version 2.2

projet jpa02

Next

projet jpa03

Ajouter le jar API 2.2 dans la librairie du projet

projet jpa librairie

Click droit sur le projet et choisir JPA Tools puis Generate Entities From Tables

projet jpa entities

Sélectionner les tables à transformer en Entities puis Finish

projet jpa entities

Les entities sont générées !

projet jpa entities

Création du Projet Spring Boot pour tester

1. Créer le projet Spring Boot avec Gradle (comme d’habitude)

Dans Gradle

	dependencies {
		implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
		implementation 'org.springframework.boot:spring-boot-starter-web'
		developmentOnly 'org.springframework.boot:spring-boot-devtools'
		runtimeOnly 'mysql:mysql-connector-java'
		implementation group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0'
		testImplementation 'org.springframework.boot:spring-boot-starter-test'
	}

2. Dans application.properties

	# gestion BD MySQL
	spring.datasource.url=jdbc:mysql://localhost:3306/concession?useSSL=false&serverTimezone=CET
	spring.datasource.username=test
	spring.datasource.password=test
	spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

	# JPA/Hibernate
	spring.jpa.show-sql=true
	spring.jpa.hibernate.ddl-auto=none  /// Important ///
	spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect

	# Swagger
	spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER

3. Pour configurer Swagger (pour tester API)

Ajout de la classe SwaggerConfig :


		package fr.bouget.jpa;

		import org.springframework.context.annotation.Bean;
		import org.springframework.context.annotation.Configuration;

		import springfox.documentation.builders.ApiInfoBuilder;
		import springfox.documentation.builders.PathSelectors;
		import springfox.documentation.builders.RequestHandlerSelectors;
		import springfox.documentation.service.ApiInfo;
		import springfox.documentation.spi.DocumentationType;
		import springfox.documentation.spring.web.plugins.Docket;


		@Configuration
		public class SwaggerConfig {

			@Bean
			public Docket api() {

				return new Docket(DocumentationType.OAS_30)
						.apiInfo(apiEndPointsInfo())
						.select()
						.apis(RequestHandlerSelectors.any())
						.paths(PathSelectors.any())
						.build();
			}

			private ApiInfo apiEndPointsInfo() {

				return new ApiInfoBuilder().title("JPA-Entities-From-Tables REST API")
						.license("Apache 2.0")
						.licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
						.version("1.0-SNAPSHOT")
						.build();
			}
		}

4. Création CouleurRepository

@Repository
public interface CouleurRepository extends JpaRepository<Couleur, Integer> {
}

5. Création CouleurController

		@RestController
		@CrossOrigin("*")
		@RequestMapping("/couleur")
		public class CouleurController {
			
			@Autowired
			CouleurRepository couleurRepository;
			
			@GetMapping("/all")
			public List<Couleur> findAll()
			{
				return couleurRepository.findAll();
			}

		}

6. Run as Spring Boot App et voir avec navigateur & swagger

Lien avec Swagger

Lien avec navigateur

Et voilà !

Retour vers les cours et TP Back-end

Retour vers le cours complet

Corrigé du Projet démo sur GitHub