Lassen Sie mich zunächst sagen, dass mir die Artikelserie von Elleanor Kerry mit dem Titel „REST Overview“ wirklich gefallen hat. Hier finden Sie Links zu diesen Artikeln:
- Übersicht über REST. Teil 1: Was ist REST?
- Übersicht über REST. Teil 2: Kommunikation zwischen Client und Server
- Übersicht über REST. Teil 3: Erstellen eines RESTful-Dienstes in Spring Boot
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
So erstellen Sie einen REST-Controller:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Für Tomcat-Server:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
Für PostgreSQL:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.10</version>
</dependency>
Nachdem wir nun pom.xml sortiert haben, gehen wir zum Ressourcenordner und füllen die Datei application.properties wie folgt aus:
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
Hier haben wir die URL unserer Datenbank eingegeben, den Benutzernamen und das Passwort dafür angegeben, den Treiber für PostgreSQL registriert, angegeben, dass wir den PostgreSQL-Datentyp verwenden würden, und den Dialekt für den Ruhezustand angegeben. Als Nächstes erstellen wir ein neues Verzeichnis mit dem Namen „Datenbank“ im selben Ressourcenordner . In diesem Verzeichnis erstellen wir zwei Dateien: initDB.sql und populateDB.sql . Der erste ist für die Erstellung der Tabellen verantwortlich, der zweite für das Ausfüllen dieser zunächst. Öffnen wir initDB.sql und sehen oben einen grünen Balken, der besagt, dass der SQL-Dialekt nicht konfiguriert ist . Das bedeutet, dass wir für unser Projekt keinen SQL-Dialekt gewählt haben (und davon gibt es mehrere). Klicken Sie auf der rechten Seite desselben Streifens auf die Aufschrift „ Dialekt ändern in…“ . Klicken Sie im Popup-Fenster auf „Project SQL Dialect“ und da unsere Datenbank PostgreSQL ist , wählen wir den gleichnamigen Dialekt aus. Klicken Sie auf „OK“. Fahren wir mit dem Ausfüllen unserer .sql- Dateien fort . Füllen wir zunächst die Datei initDB.sql aus :
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
);
Wenn nach dem Ausfüllen der Datei einige andere Wörter als „ Clients“ in weißer Schrift geschrieben sind, klicken Sie mit der rechten Maustaste in den Text und wählen Sie erneut „Dialekt ändern --> PostgreSQL“ . Wie Sie wahrscheinlich bereits verstanden haben, handelt es sich hierbei um dieselben Daten, die wir bei der manuellen Erstellung der Testtabelle eingegeben haben. Hier sind sie im PostgreSQL-Dialekt der SQL-Sprache formatiert. Füllen wir nun die Datei 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)');
Wenn der Name des Tisches Ihres Kunden in roten Buchstaben geschrieben ist, ist das in Ordnung. Der Punkt ist, dass wir diese Tabelle noch nicht erstellt haben und IDEA sie noch nicht erkennt. Um die Tabelle zu erstellen und zu füllen, müssen wir zur Datei application.properties zurückkehren und dort die folgenden drei Zeilen hinzufügen:
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
In diesen Zeilen sagen wir, dass wir die Datenbank programmgesteuert initialisieren wollen und geben an, welche Dateien dafür verwendet werden müssen. Gehen Sie als Nächstes zur Hauptmethode unserer Anwendung und starten Sie sie . Gehen Sie danach zu pgAdmin -> Server -> PostgreSQL 12 -> Datenbanken -> Kunden -> Schemas -> öffentlich und klicken Sie mit der rechten Maustaste auf „ Tabellen “, „ Aktualisieren “. Wenn alles gut gelaufen ist, sehen wir die von uns erstellte Kundentabelle . Gehen Sie danach zurück zur Datei application.properties und kommentieren Sie die Zeile aus.
spring.datasource.data=classpath*:database/populateDB.sql
wie nachstehend:
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
Wenn wir dies nicht tun, erhalten wir beim nächsten Ausführen des Programms die folgende Fehlermeldung: org.postgresql.util.PSQLException: ERROR: Ein doppelter Schlüsselwert verletzt die eindeutige Einschränkung „clients_pkey“ . Dies geschieht, weil wir die Felder mit den IDs 1 und 2 in der Tabelle bereits ausgefüllt haben (sogar beim ersten Start). In der von uns erstellten Tabelle ist das ID- Feld als bigserial angegeben , was dem Long- Typ in Java entspricht. In unserem Programm ist der Typ für dieses Feld jedoch Integer . Ich habe beschlossen, die Verwendung von Long (BIGSERIAL) zu zeigen, da es einen größeren Bereich als Integer hat. Tatsache ist, dass in Tabellen ein als Primärschlüssel bezeichnetes Feld nicht nur zum Speichern von Benutzer- IDs , sondern auch zum Speichern von Indizes einer Vielzahl von Daten verwendet werden kann und die Anzahl solcher Datensätze den maximalen Ganzzahlwert überschreiten kann. Wenn unser Programm beispielsweise jede Sekunde einige Messungen vornimmt und die Daten in eine Tabelle schreibt. Um unsere Klassen so umzuschreiben, dass sie den Long-Datentyp verwenden, müssen wir den Typ in allen Klassen und Methoden, die das ID- Feld verwenden, von Integer in Long ändern . Wir werden dies nicht tun, da das Programm ursprünglich vom Autor für den Typ „id Integer“ geschrieben wurde, was bedeutet, dass dies durchaus Sinn macht. Um fortzufahren, entfernen wir noch einmal die von uns erstellte Clients- Tabelle aus unserer Datenbank, aber jetzt versuchen wir, dies programmgesteuert und nicht manuell zu tun. Kommentieren Sie dazu unseren Code in der Datei initDB.sql aus und fügen Sie eine Zeile hinzu:
-- 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
Starten wir das Programm, gehen Sie zu pgAdmin , klicken Sie mit der rechten Maustaste auf „ Tabellen “ (in unserer Kundendatenbank ) -> „ Aktualisieren “, und wir werden sehen, dass unsere Tabelle verschwunden ist. ACHTUNG! Seien Sie vorsichtig, wenn Sie diesen Befehl verwenden, sonst riskieren Sie den Verlust aller Daten, die Sie in Ihrer Tabelle hatten! Kehren wir zur Datei initDB.sql zurück und schreiben sie wie folgt um:
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
);
Hier haben wir den ID- Typ in SERIAL geändert , was dem Integer- Typ entspricht, den wir für das ID- Feld in unserem Programm verwenden . Darüber hinaus wurde die maximale Länge des Telefonfelds erhöht, sodass wir beim Schreiben frei Leerzeichen und Sonderzeichen (Klammern, Bindestriche usw.) verwenden können. Die maximale Ziffernanzahl einer Telefonnummer beträgt derzeit 18 Ziffern (wenn ich mich richtig erinnere). Zur Sicherheit habe ich die Größe auf 50 Zeichen eingestellt. Gehen wir zur Datei application.properties und kommentieren die Zeile aus:
spring.datasource.data=classpath*:database/populateDB.sql
Lassen Sie uns unser Programm ausführen, zu pgAdmin gehen, überprüfen, ob unsere Tabelle erstellt wurde, und diese Zeile wieder auskommentieren.
#spring.datasource.data=classpath*:database/populateDB.sql
Hier werde ich wahrscheinlich den ersten Teil des Artikels beenden. Ich hoffe es gefällt euch, schreibt Kommentare (auch wenn es euch nicht gefallen hat). Im zweiten Teil werden wir unsere Klassen umschreiben, damit sie mit echten Datenbanken arbeiten können. Fortsetzung: Hinzufügen einer PostgreSQL-Datenbank zu einem RESTful-Dienst auf Spring Boot. Teil 2 UPD Vielen Dank an die Moderatoren für die Korrektur meiner Bilder und Textformatierung!
GO TO FULL VERSION