Permettez-moi de commencer par dire que j'ai vraiment apprécié la série d'articles d' Elleanor Kerry intitulée « Présentation de REST ». Voici les liens vers ces articles :
- Présentation de REST. Partie 1 : Qu'est-ce que REST
- Présentation de REST. Partie 2 : Communication entre client et serveur
- Présentation de REST. Partie 3 : Création d'un service RESTful dans Spring Boot
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Pour créer un contrôleur REST :
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Pour le serveur Tomcat :
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
Pour PostgreSQL :
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.10</version>
</dependency>
Maintenant que nous avons trié pom.xml, allons dans le dossier resources et remplissons le fichier application.properties comme suit :
spring.datasource.url=jdbc:postgresql://localhost:5432/customers
spring.datasource.username=root
spring.datasource.password=123
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database=postgresql
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL10Dialect
Ici, nous avons entré l'URL de notre base de données, fourni le login et le mot de passe, enregistré le pilote pour PostgreSQL, indiqué que nous utiliserions le type de données PostgreSQL et spécifié le dialecte pour Hibernate. Ensuite, créons un nouveau répertoire appelé base de données dans le même dossier de ressources . Dans ce répertoire nous allons créer 2 fichiers : initDB.sql et populateDB.sql . Le premier se chargera de créer les tableaux, le second se chargera de les remplir dans un premier temps. Ouvrons initDB.sql et voyons une barre verte en haut indiquant que le dialecte SQL n'est pas configuré . Cela signifie que nous n'avons pas choisi de dialecte SQL pour notre projet (et il en existe plusieurs). Cliquez à droite de la même bande sur l'inscription Changer de dialecte en… . Dans la fenêtre contextuelle, cliquez sur Project SQL Dialect , et comme notre base de données est PostgreSQL , nous sélectionnons le dialecte du même nom. Cliquez sur OK Passons au remplissage de nos fichiers .sql . Remplissons d'abord le fichier initDB.sql :
CREATE TABLE IF NOT EXISTS clients
(
id BIGSERIAL PRIMARY KEY ,
name VARCHAR(200) NOT NULL ,
email VARCHAR(254) NOT NULL ,
phone VARCHAR(20) NOT NULL
);
Si, après avoir rempli le fichier, certains mots autres que clients sont écrits en police blanche, faites un clic droit à l'intérieur du texte et sélectionnez à nouveau Changer de dialecte --> PostgreSQL . Comme vous l'avez probablement déjà compris, il s'agit des mêmes données que nous avons renseignées lors de la création manuelle de la table de test. Ici ils sont formatés dans le dialecte PostgreSQL du langage SQL. Remplissons maintenant le fichier populateDB.sql :
INSERT INTO clients VALUES
(1, 'Vassily Petrov', 'vpetrov@jr.com', '+7 (191) 322-22-33)'),
(2, 'Pjotr Vasechkin', 'pvasechkin@jr.com', '+7 (191) 223-33-22)');
Si le nom de votre table clients est écrit en lettres rouges, alors ce n’est pas grave. Le fait est que nous n'avons pas encore créé cette table et IDEA ne la reconnaît pas encore. Afin de créer et de remplir le tableau, nous devons revenir au fichier application.properties et y ajouter les trois lignes suivantes :
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
Dans ces lignes, nous disons que nous voulons initialiser la base de données par programme et indiquer quels fichiers doivent être utilisés pour cela. Ensuite, accédez à la méthode principale de notre application et lancez-la . Après cela, allez dans pgAdmin --> Serveurs --> PostgreSQL 12 --> Bases de données --> clients --> Schémas --> public , faites un clic droit sur " Tables ", " Mettre à jour ". Si tout s'est bien passé, nous voyons alors la table des clients que nous avons créée . Après cela, revenez au fichier application.properties et commentez la ligne.
spring.datasource.data=classpath*:database/populateDB.sql
comme ci-dessous :
spring.datasource.url=jdbc:postgresql://localhost:5432/customers
spring.datasource.username=root
spring.datasource.password=123
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database=postgresql
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL10Dialect
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
#spring.datasource.data=classpath*:database/populateDB.sql
Si nous ne le faisons pas, la prochaine fois que nous exécuterons le programme, nous recevrons l'erreur suivante : org.postgresql.util.PSQLException : ERREUR : Une valeur de clé en double viole la contrainte unique "clients_pkey" . Cela se produit parce que nous avons déjà rempli les champs avec les identifiants 1 et 2 dans le tableau (même lors du premier lancement). Dans le tableau que nous avons créé, le champ id est spécifié comme bigserial , ce qui correspond au type Long en Java. Cependant, dans notre programme, le type de ce champ est Integer . J'ai décidé de montrer comment utiliser Long (BIGSERIAL) car il a une plage plus large que Integer. Le fait est que dans les tables, un champ désigné comme clé primaire peut être utilisé non seulement pour stocker les identifiants des utilisateurs , mais également pour stocker des index d'une grande variété de données, et le nombre de ces enregistrements peut dépasser la valeur entière maximale. Par exemple, si notre programme prend des mesures chaque seconde et écrit les données dans un tableau. Afin de réécrire nos classes pour utiliser le type de données Long, nous devons changer le type de Integer en Long dans toutes les classes et méthodes qui utilisent le champ id . Nous ne le ferons pas, car le programme a été initialement écrit par l'auteur pour le type id Integer, ce qui signifie que cela a du sens. Pour continuer, supprimons à nouveau la table clients que nous avons créée de notre base de données, mais nous allons maintenant essayer de le faire par programme plutôt que manuellement. Pour ce faire, commentez notre code dans le fichier initDB.sql et ajoutez une ligne :
-- CREATE TABLE IF NOT EXISTS clients
-- (
-- id BIGSERIAL PRIMARY KEY ,
-- name VARCHAR(200) NOT NULL ,
-- email VARCHAR(254) NOT NULL ,
-- phone VARCHAR(20) NOT NULL
-- );
DROP TABLE IF EXISTS clients
Lançons le programme, allons sur pgAdmin , faites un clic droit sur « Tables » (dans notre base de données clients ) - -> « Mettre à jour », et nous verrons que notre table a disparu. Attention ! Soyez prudent lorsque vous utilisez cette commande, sinon vous risquez de perdre toutes les données que vous aviez dans votre table ! Revenons au fichier initDB.sql et réécrivons-le comme suit :
CREATE TABLE IF NOT EXISTS clients
(
id SERIAL PRIMARY KEY ,
name VARCHAR(200) NOT NULL ,
email VARCHAR(254) NOT NULL ,
phone VARCHAR(50) NOT NULL
);
Ici, nous avons changé le type d'identifiant en SERIAL , qui correspond au type Integer que nous utilisons pour le champ id de notre programme. De plus, la longueur maximale du champ téléphonique a été augmentée afin que l'on puisse utiliser librement les espaces et les caractères spéciaux (parenthèses, tirets, etc.) dans son écriture. Le nombre maximum de chiffres dans un numéro de téléphone est actuellement de 18 chiffres (si ma mémoire est bonne). J'ai défini la taille à 50 caractères pour être sûr. Allons dans le fichier application.properties et décommentons la ligne :
spring.datasource.data=classpath*:database/populateDB.sql
Exécutons notre programme, allons sur pgAdmin, vérifions que notre table a été créée et commentons cette ligne.
#spring.datasource.data=classpath*:database/populateDB.sql
C’est là que je terminerai probablement la première partie de l’article. J'espère que vous l'aimerez, écrivez des commentaires (même si vous ne l'avez pas aimé). Dans la deuxième partie, nous réécrirons nos classes afin qu'elles puissent travailler avec de vraies bases de données. Suite : Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot. Partie 2 UPD Merci aux modérateurs pour avoir corrigé mes images et le formatage de mon texte !
GO TO FULL VERSION