JavaRush /Java Blog /Random-IT /Aggiunta di un database PostgreSQL a un servizio RESTful ...
Artur
Livello 40
Tallinn

Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot. Parte 1

Pubblicato nel gruppo Random-IT
Vorrei iniziare dicendo che mi è piaciuta molto la serie di articoli di Elleanor Kerry intitolata "Panoramica REST". Ecco i link a questi articoli: Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 1In generale, ho deciso di prendermi la libertà e aggiungerne qualcosa. Vale a dire, spiega come creare un database e collegarlo a questa applicazione. Da dove cominciare? Probabilmente dal database stesso. Ho deciso di utilizzare PostgreSQL perché mi piaceva la sua interfaccia di amministrazione intuitiva. Per prima cosa dobbiamo scaricare il programma di installazione di PostgreSQL, ad esempio da qui: Download del database PostgreSQL Non descriverò il processo di installazione completo, perché potrebbe differire a seconda del sistema operativo. Tuttavia, noto che nel processo dovrai trovare una password di amministratore per il ruolo (account) postgres predefinito e inserirla 2 volte. Per semplicità, ho impostato la password su 123 . Naturalmente, nei progetti reali è necessario inventare qualcosa di più complicato. Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 2Successivamente, il programma di installazione ti chiede di selezionare una porta; l'ho lasciato al valore predefinito. Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 3Anche la lingua è stata lasciata come predefinita. Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 4Installato, quindi apri l'interfaccia amministratore pgAdmin . Si aprirà un browser con una finestra pop-up in cui ci verrà chiesto di inserire la password precedentemente creata. Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 5Ora dobbiamo impostare la lingua dell'interfaccia. Per fare ciò, fare clic su Configura pgAdmin --> Varie --> Lingua utente , selezionare la lingua desiderata --> Salva e ricaricare la pagina del browser . Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 6Nell'angolo in alto a sinistra della pagina, fare clic su Server , viene visualizzata la finestra " Connetti al server " . Inserisci nuovamente la nostra password e seleziona la casella Salva password per non inserirla ogni volta. Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 7Potremmo continuare a utilizzare il ruolo di amministratore per tutti i database, ma sarebbe meglio creare un nuovo ruolo, perché potremmo avere molti database e molti programmi che li utilizzano. Per fare ciò, nell'angolo in alto a sinistra, fai clic su PostgreSQL 12 --> RMB su Ruoli Login/Gruppo --> Crea --> Ruolo Login/Gruppo Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 8 Nella finestra pop-up, nella scheda " Generale ", inserisci il nome del ruolo. Ho chiamato il ruolo root . Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 9Nella scheda “ Definizione ” creiamo una nuova password, io ho lasciato 123 proprio per non confondermi. Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 10Vai alla scheda “ Diritti ” e contrassegna tutti gli elementi necessari. Ho impostato tutti gli elementi su " SI ". Fare clic su " Salva " Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 11Procediamo alla creazione di un database. Fare clic con il tasto destro su "Database" --> Crea --> Database Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 12 Nella scheda " Generale ", creare il nome del database. Che siano, ad esempio, i clienti . Assegniamo il proprietario a root , che abbiamo creato nel passaggio precedente. Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 13Sul "Definizione »verifica di avere la codifica UTF8 impostata . Fare clic su " Salva ". Questo è tutto, il nostro database è stato creato (per ora vuoto). Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 14A questo punto potremmo concludere con pgAdmin, perché... Creeremo le tabelle a livello di codice ma, per ogni evenienza, ti mostrerò come creare una tabella manualmente. Espandi i clienti --> Schemi --> albero pubblico . Fare clic con il tasto destro su Tabelle --> Crea --> Tabella . Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 15Si aprirà una finestra pop-up. Nella scheda " Generale " assegniamo un nome alla nostra tabella, ad esempio test_table , e assegniamo root come proprietario . Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 16Vai alla scheda “ Colonne ”, fai clic su “ + ” per creare una nuova colonna. Inserisci il nome " id " e il tipo di dati bigserial , che è equivalente al tipo Long in Java, ma con incremento automatico (quando si aggiunge un nuovo record, l'id aumenterà automaticamente di uno). Contrassegniamo un valore diverso da NULL come " ", anche la chiave primaria è " ". Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 17Creiamo allo stesso modo le colonne “ nome ”, “ email ” e “ telefono ” . Selezioniamo il tipo di dati carattere variabile , questo corrisponde al tipo String , ma permette di impostare la lunghezza massima. Impostiamo la lunghezza massima del nome su 200 caratteri per inserire il nome completo. in una colonna. Impostiamo la lunghezza massima dell'email su 254 caratteri. Il motivo per cui l'e-mail ha una lunghezza massima simile può essere trovato qui . Per un numero di telefono, seleziona 20 caratteri, questo dovrebbe essere sufficiente. Un po' sui numeri di telefono: Idee sbagliate dei programmatori sui numeri di telefono (Habr) Contrassegniamo un valore diverso da NULL in tutte le colonne come “ ” se vogliamo che questi dati siano obbligatori. Fare clic su " Salva ". Questo è tutto, la tabella è stata creata. Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 18Per eliminare la nostra tabella di test, fare clic con il tasto destro su di essa (nell'albero) e " eliminare ", perché Non ne avremo più bisogno, perché creeremo tabelle dal nostro programma. Chiudi pgAdmin e vai al nostro programma. Apriamo IDEA con il nostro progetto. Fare clic su Database nella colonna di destra dell'interfaccia, fare clic su " + " per aggiungere il nostro database. Successivo Origine dati --> PostgreSQL . Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 19Nella finestra pop-up, inserisci nel campo Utente il ruolo root che abbiamo creato in precedenza e la nostra password123 nel campo password . Nel campo Database scriviamo il nome del nostro database clienti . Premiamo il pulsante Test connessione e, se sotto di esso vediamo un segno di spunta verde, è tutto in ordine e premiamo il pulsante OK . Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 20Questo è tutto, ci siamo collegati al database, ora andiamo al file pom.xml e aggiungiamo le dipendenze. Per lavorare con il database ORM :
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Per creare un controller REST:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Per il server Tomcat:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
Per PostgreSQL:
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.10</version>
</dependency>
Ora che abbiamo risolto pom.xml, andiamo alla cartella delle risorse e compiliamo il file application.properties come segue:
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
Qui abbiamo inserito l'URL del nostro database, fornito login e password, registrato il driver per PostgreSQL, indicato che avremmo utilizzato il tipo di dati PostgreSQL e specificato il dialetto per Hibernate. Successivamente, creiamo una nuova directory chiamata database nella stessa cartella delle risorse . In questa directory creeremo 2 file: initDB.sql e populateDB.sql . Il primo si occuperà della creazione delle tabelle, il secondo si occuperà di compilarle inizialmente. Apriamo initDB.sql e vediamo una barra verde in alto che dice che il dialetto SQL non è configurato . Ciò significa che non abbiamo scelto un dialetto SQL per il nostro progetto (e ce ne sono diversi). Cliccare sul lato destro della stessa striscia sulla scritta Cambia dialetto in… . Nella finestra pop-up, fai clic su Project SQL Dialect e, poiché il nostro database è PostgreSQL , selezioniamo il dialetto con lo stesso nome. Fare clic su OK Aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot.  Parte 1 - 21 Passiamo alla compilazione dei nostri file .sql . Per prima cosa compiliamo il file 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
);
Se, dopo aver compilato il file, alcune parole diverse da client sono scritte in carattere bianco, fare clic con il tasto destro all'interno del testo e selezionare nuovamente Cambia dialetto --> PostgreSQL . Come probabilmente hai già capito, si tratta degli stessi dati che abbiamo inserito durante la creazione manuale della tabella di test. Qui sono formattati nel dialetto PostgreSQL del linguaggio SQL. Ora riempiamo il file 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)');
Se il nome della tabella dei tuoi clienti è scritto in lettere rosse, allora va bene. Il punto è che non abbiamo ancora creato questa tabella e IDEA non la riconosce ancora. Per creare e popolare la tabella, dobbiamo tornare al file application.properties e aggiungere lì le seguenti tre righe:
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
In queste righe diciamo che vogliamo inizializzare il database a livello di codice e indicare quali file devono essere utilizzati per questo. Successivamente, vai al metodo principale della nostra applicazione e avvialo . Successivamente, vai su pgAdmin --> Server --> PostgreSQL 12 --> Database --> clienti --> Schemi --> public , fai clic con il pulsante destro del mouse su " Tabelle ", " Aggiorna ". Se tutto è andato bene, vedremo la tabella dei clienti che abbiamo creato . Successivamente, torna al file application.properties e commenta la riga.
spring.datasource.data=classpath*:database/populateDB.sql
come sotto:
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
Se non lo facciamo, la prossima volta che eseguiremo il programma riceveremo il seguente errore: org.postgresql.util.PSQLException: ERRORE: un valore di chiave duplicato viola il vincolo univoco "clients_pkey" . Questo accade perché abbiamo già compilato i campi con id 1 e 2 nella tabella (anche durante il primo lancio). Nella tabella che abbiamo creato, il campo id è specificato come bigserial , che corrisponde al tipo Long in Java. Tuttavia, nel nostro programma il tipo di questo campo è Integer . Ho deciso di mostrare come utilizzare Long (BIGSERIAL) perché ha un intervallo più ampio di Integer. Il fatto è che nelle tabelle, un campo designato come Chiave primaria può essere utilizzato non solo per memorizzare gli ID utente , ma anche per memorizzare indici di un'ampia varietà di dati e il numero di tali record può superare il valore intero massimo. Ad esempio, se il nostro programma effettua alcune misurazioni ogni secondo e scrive i dati in una tabella. Per riscrivere le nostre classi per utilizzare il tipo di dati Long, dobbiamo cambiare il tipo da Integer a Long in tutte le classi e metodi che utilizzano il campo id . Non lo faremo, perché il programma è stato originariamente scritto dall'autore per il tipo id Integer, il che significa che ha un senso. Per continuare, rimuoviamo ancora una volta la tabella client che abbiamo creato dal nostro database, ma ora proveremo a farlo a livello di codice anziché manualmente. Per fare ciò, commenta il nostro codice nel file initDB.sql e aggiungi una riga:
-- 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
Lanciamo il programma, andiamo su pgAdmin , clicchiamo con il tasto destro su “ Tabelle ” (nel nostro database clienti ) ->Aggiorna ”, e vedremo che la nostra tabella è scomparsa. ATTENZIONE! Fai attenzione quando usi questo comando, altrimenti rischi di perdere tutti i dati che avevi nella tabella! Torniamo al file initDB.sql e riscriviamolo come segue:
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
);
Qui abbiamo cambiato il tipo id in SERIAL , che corrisponde al tipo Integer che stiamo utilizzando per il campo id nel nostro programma. Inoltre, è stata aumentata la lunghezza massima del campo telefonico in modo da poter utilizzare liberamente spazi e caratteri speciali (parentesi, trattini, ecc.) nella sua scrittura. Il numero massimo di cifre in un numero di telefono è attualmente di 18 cifre (se la memoria non mi inganna). Ho impostato la dimensione su 50 caratteri per essere sicuro. Andiamo al file application.properties e decommentiamo la riga:
spring.datasource.data=classpath*:database/populateDB.sql
Eseguiamo il nostro programma, andiamo su pgAdmin, controlliamo che la nostra tabella sia stata creata e commentiamo questa riga.
#spring.datasource.data=classpath*:database/populateDB.sql
Probabilmente finirò qui la prima parte dell’articolo. Spero che vi piaccia, scrivete commenti (anche se non vi è piaciuto). Nella seconda parte riscriveremo le nostre classi in modo che possano funzionare con database reali. Continuazione: aggiunta di un database PostgreSQL a un servizio RESTful su Spring Boot. Parte 2 UPD Grazie ai moderatori per aver corretto le mie immagini e la formattazione del testo!
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION