JavaRush /Blog Java /Random-FR /Ajout d'une base de données PostgreSQL à un service RESTf...
Artur
Niveau 40
Tallinn

Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot. Partie 1

Publié dans le groupe Random-FR
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 : Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 - 1En général, j'ai décidé de prendre la liberté et d'en ajouter un peu. À savoir, expliquez comment créer une base de données et la connecter à cette application. Où commencer? Probablement à partir de la base de données elle-même. J'ai décidé d'utiliser PostgreSQL parce que j'ai aimé son interface d'administration conviviale. Tout d'abord, nous devons télécharger le programme d'installation de PostgreSQL, par exemple à partir d'ici : Téléchargement de la base de données PostgreSQL. Je ne décrirai pas le processus d'installation complet, car cela peut différer en fonction de votre système d’exploitation. Cependant, je note que dans le processus, vous devrez trouver un mot de passe administrateur pour le rôle postgres par défaut (compte) et le saisir 2 fois. Pour plus de simplicité, j'ai défini le mot de passe sur 123 . Bien sûr, dans les projets réels, il faut trouver quelque chose de plus compliqué. Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 - 2Ensuite, le programme d'installation vous demande de sélectionner un port ; je l'ai laissé à sa valeur par défaut. Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 à 3Les paramètres régionaux ont également été laissés par défaut. Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 à 4Installé, puis ouvrez l'interface administrateur pgAdmin . Un navigateur s'ouvrira avec une fenêtre pop-up dans laquelle il nous sera demandé de saisir le mot de passe précédemment créé. Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 à 5Nous devons maintenant définir la langue de l'interface. Pour ce faire, cliquez sur Configurer pgAdmin --> Divers --> Langue utilisateur , sélectionnez la langue souhaitée --> Enregistrer et rechargez la page du navigateur . Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 à 6Dans le coin supérieur gauche de la page, cliquez sur Serveur , la fenêtre « Se connecter au serveur » apparaît . Saisissez à nouveau notre mot de passe et cochez la case Enregistrer le mot de passe pour ne pas le saisir à chaque fois. Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 à 7Nous pourrions continuer à utiliser le rôle d'administrateur pour toutes les bases de données, mais il serait préférable de créer un nouveau rôle, car nous pouvons avoir de nombreuses bases de données et de nombreux programmes qui les utilisent. Pour cela, dans le coin supérieur gauche, cliquez sur PostgreSQL 12 --> RMB sur Login/Group Roles --> Create --> Login/Group Role Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 à 8 Dans la fenêtre pop-up, sur l'onglet « Général », saisissez le nom du rôle. J'ai nommé le rôle root . Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 à 9Sur l'onglet « Définition » on crée un nouveau mot de passe, j'en ai laissé 123 juste pour ne pas se tromper. Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 à 10Allez dans l’onglet « Droits » et cochez tous les éléments nécessaires. J'ai mis tous les éléments sur " OUI ". Cliquez sur « Enregistrer » Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 - 11Nous procédons à la création d'une base de données. Faites un clic droit sur « Bases de données » --> Créer --> Base de données. Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 à 12 Dans l'onglet « Général », créez le nom de la base de données. Que ce soit, par exemple, les clients . Nous attribuons le propriétaire à root , que nous avons créé à l'étape précédente. Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 - 13Sur le "Définition »Vérifiez que nous avons le codage UTF8 défini . Cliquez sur « Enregistrer ». Ça y est, notre base de données a été créée (vide pour l'instant). Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 - 14À ce stade, nous pourrions terminer avec pgAdmin, car... Nous allons créer des tables par programme, mais, juste au cas où, je vais vous montrer comment créer une table manuellement. Développez les clients --> Schémas --> arborescence publique . Cliquez avec le bouton droit sur Tables --> Créer --> Table . Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 - 15Une fenêtre pop-up s'ouvrira. Dans l'onglet « Général », nous attribuons un nom à notre table, par exemple test_table , et attribuons root comme propriétaire . Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 - 16Allez dans l’onglet « Colonnes », cliquez sur « + » pour créer une nouvelle colonne. Entrez le nom « id » et le type de données bigserial , qui est équivalent au type Long en Java, mais avec incrémentation automatique (lors de l'ajout d'un nouvel enregistrement, l'identifiant augmentera automatiquement de un). Nous marquons non NULL comme « Oui », la clé primaire est également « Oui ». Nous créons les colonnes « nom », « email » et « téléphoneAjout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 - 17 » de la même manière . Nous sélectionnons le type de données caractère variable , cela correspond au type String , mais permet de définir la longueur maximale. Nous fixons la longueur maximale du nom à 200 caractères pour remplir le nom complet. dans une colonne. Nous fixons la longueur maximale des e-mails à 254 caractères. La raison pour laquelle le courrier électronique a une telle longueur maximale peut être trouvée ici . Pour un numéro de téléphone, sélectionnez 20 caractères, cela devrait suffire. Un peu sur les numéros de téléphone : Idées fausses des programmeurs sur les numéros de téléphone (Habr) Nous marquons non NULL dans toutes les colonnes comme « Oui » si nous voulons que ces données soient obligatoires. Cliquez sur « Enregistrer ». Ça y est, le tableau a été créé. Pour supprimer notre table de test, faites un clic droit dessus (dans l'arborescence) et « supprimer », car Nous n'en avons plus besoin, car nous allons créer des tables à partir de notre programme. Fermez pgAdmin et accédez à notre programme. Ouvrons IDEA avec notre projet. Cliquez sur Base de données dans la colonne de droite de l'interface, cliquez sur « + » pour ajouter notre base de données. Source de données suivante --> PostgreSQL . Dans la fenêtre pop-up, saisissez dans le champ Utilisateur le rôle root que nous avons créé précédemment et notre mot de passe.Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 - 18Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 - 19123 dans le champ mot de passe . Dans le champ Base de données , nous écrivons le nom de notre base de données clients . Nous appuyons sur le bouton Test de connexion , et si nous voyons une coche verte en dessous, alors tout est en ordre et nous appuyons sur le bouton OK . Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 - 20Ça y est, nous sommes connectés à la base de données, allons maintenant dans le fichier pom.xml et ajoutons des dépendances. Pour travailler avec la base de données ORM :
<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 Ajout d'une base de données PostgreSQL à un service RESTful sur Spring Boot.  Partie 1 - 21 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 !
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION