Vorrei iniziare dicendo che mi è piaciuta molto la serie di articoli di Elleanor Kerry intitolata "Panoramica REST". Ecco i link a questi articoli:
- Panoramica di REST. Parte 1: Cos'è REST
- Panoramica di REST. Parte 2: Comunicazione tra client e server
- Panoramica di REST. Parte 3: creazione di un servizio RESTful in Spring Boot
<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 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!
GO TO FULL VERSION