JavaRush /Blog Java /Random-PL /Dodanie bazy danych PostgreSQL do usługi RESTful w Spring...
Artur
Poziom 40
Tallinn

Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot. Część 1

Opublikowano w grupie Random-PL
Zacznę od tego, że bardzo podobała mi się seria artykułów Elleanor Kerry zatytułowana „REST Review”. Oto linki do tych artykułów: Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 1Ogólnie rzecz biorąc, postanowiłem pozwolić sobie na trochę swobody i dodać do nich trochę. Mianowicie podpowiedz jak stworzyć bazę danych i podłączyć ją do tej aplikacji. Gdzie zacząć? Prawdopodobnie z samej bazy danych. Zdecydowałem się na PostgreSQL , ponieważ spodobał mi się jego przyjazny interfejs administracyjny. Na początek musimy pobrać instalator PostgreSQL, np. stąd: Pobieranie bazy danych PostgreSQL Nie będę opisywał całego procesu instalacji, gdyż może się różnić w zależności od systemu operacyjnego. Zauważam jednak, że w tym procesie będziesz musiał wymyślić hasło administratora dla domyślnej roli postgres (konta) i wprowadzić je 2 razy. Dla uproszczenia ustawiłem hasło na 123 . Oczywiście w prawdziwych projektach trzeba wymyślić coś bardziej skomplikowanego. Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 2Następnie program instalacyjny poprosi Cię o wybranie portu; pozostawiłem jego wartość domyślną. Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 3Ustawienia regionalne również pozostawiono jako domyślne. Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 4Zainstalowano, a następnie otwórz interfejs administratora pgAdmin . Otworzy się przeglądarka z wyskakującym okienkiem, w którym zostaniemy poproszeni o podanie wcześniej utworzonego hasła. Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 5Teraz musimy ustawić język interfejsu. Aby to zrobić, kliknij Konfiguruj pgAdmin -> Różne -> Język użytkownika , wybierz żądany język -> Zapisz i ponownie załaduj stronę przeglądarki . Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 6W lewym górnym rogu strony kliknij Serwer , pojawi się okno „ Połącz z serwerem ” . Wpisz ponownie nasze hasło i zaznacz pole Zapisz hasło , aby nie wpisywać go za każdym razem. Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 7Moglibyśmy nadal używać roli administratora dla wszystkich baz danych, ale lepiej byłoby utworzyć nową rolę, ponieważ możemy mieć wiele baz danych i wiele programów, które z nich korzystają. Aby to zrobić, w lewym górnym rogu kliknij PostgreSQL 12 --> PPM na Login/Role grupowe --> Utwórz --> Login/Rola grupowa Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 8 W wyskakującym oknie, w zakładce „ Ogólne ” wpisz nazwa roli. Nazwałem rolę root . Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 9W zakładce „ Definicja ” tworzymy nowe hasło, zostawiłem 123 , żeby się nie pomylić. Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 10Przejdź do zakładki „ Uprawnienia ” i zaznacz wszystkie niezbędne pozycje. Ustawiłem wszystkie pozycje na „ TAK ”. Kliknij „ Zapisz ”. Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 11Przystępujemy do tworzenia bazy danych. Kliknij prawym przyciskiem myszy „Bazy danych” --> Utwórz --> Baza danych Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 12 Na karcie „ Ogólne ” utwórz nazwę bazy danych. Niech będą to na przykład klienci . Przypisujemy właściciela do roota , którego utworzyliśmy w poprzednim kroku. Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 13Na "Definicja » sprawdź czy mamy ustawione kodowanie UTF8 . Kliknij „ Zapisz ”. To wszystko, nasza baza danych została utworzona (na razie pusta). Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 14W tym momencie moglibyśmy zakończyć na pgAdmin, ponieważ... Tabele utworzymy programowo, ale na wszelki wypadek pokażę, jak ręcznie utworzyć tabelę. Rozwiń klientów --> Schematy --> drzewo publiczne . Kliknij prawym przyciskiem myszy Tabele --> Utwórz --> Tabela . Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 15Otworzy się wyskakujące okno. W zakładce „ Ogólne ” nadajemy naszej tabeli nazwę, np. test_table i przypisujemy root jako właściciela . Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 16Przejdź do zakładki „ Kolumny ”, kliknij „ + ”, aby utworzyć nową kolumnę. Wprowadź nazwę „ id ” i typ danych bigserial , który w Javie jest odpowiednikiem typu Long , ale z automatyczną inkrementacją (podczas dodawania nowego rekordu id automatycznie zwiększy się o jeden). Zaznaczamy wartość inną niż NULL jako „ Tak ”, klucz podstawowy to także „ Tak ”. Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 17W ten sam sposób tworzymy kolumny „ nazwa ”, „ e-mail ” i „ telefon ” . Wybieramy typ danych znak zmienny , odpowiada to typowi String , ale pozwala ustawić maksymalną długość. Ustawiamy maksymalną długość nazwy na 200 znaków, aby wypełnić pełne imię i nazwisko. w jednej kolumnie. Ustawiamy maksymalną długość wiadomości e-mail na 254 znaki. Dlaczego e-mail ma taką maksymalną długość, możesz dowiedzieć się tutaj . W przypadku numeru telefonu wybierz 20 znaków, to powinno wystarczyć. Trochę o numerach telefonów: Błędne wyobrażenia programistów na temat numerów telefonów (Habr) We wszystkich kolumnach zaznaczamy wartość inną niż NULL jako „ Tak ”, jeśli chcemy, aby te dane były obowiązkowe. Kliknij „ Zapisz ”. To wszystko, tabela została utworzona. Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 18Aby usunąć naszą tabelę testową, kliknij ją prawym przyciskiem myszy (w drzewie) i „ usuń ”, ponieważ Nie potrzebujemy już tego, ponieważ będziemy tworzyć tabele z naszego programu. Zamknij pgAdmin i przejdź do naszego programu. Otwórzmy IDEA naszym projektem. Kliknij Baza danych w prawej kolumnie interfejsu, kliknij „ + ”, aby dodać naszą bazę danych. Następne źródło danych --> PostgreSQL . Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 19W wyskakującym okienku wpisz w polu Użytkownik utworzoną wcześniej rolę root oraz nasze hasło123 w polu hasła . W polu Baza danych wpisujemy nazwę bazy danych naszych klientów . Naciskamy przycisk Testuj połączenie , a jeśli zobaczymy pod nim zielony znacznik wyboru, oznacza to, że wszystko jest w porządku i wciskamy przycisk OK . Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 20To wszystko, połączyliśmy się z bazą danych, teraz przejdźmy do pliku pom.xml i dodajmy zależności. Aby pracować z bazą danych ORM :
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Aby utworzyć kontroler REST:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Dla serwera Tomcat:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
Dla PostgreSQLa:
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.10</version>
</dependency>
Teraz, gdy już uporządkowaliśmy plik pom.xml, przejdźmy do folderu zasobów i wypełnij plik application.properties w następujący sposób:
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
Tutaj wpisaliśmy adres URL naszej bazy danych, podaliśmy do niej login i hasło, zarejestrowaliśmy sterownik dla PostgreSQL, wskazaliśmy, że będziemy używać typu danych PostgreSQL i określiliśmy dialekt dla Hibernacji. Następnie utwórzmy nowy katalog o nazwie baza danych w tym samym folderze zasobów . W tym katalogu utworzymy 2 pliki: initDB.sql i populateDB.sql . Pierwszy będzie odpowiedzialny za tworzenie tabel, drugi za ich wstępne wypełnienie. Otwórzmy plik initDB.sql i zobaczmy u góry zielony pasek z informacją, że dialekt SQL nie jest skonfigurowany . Oznacza to, że dla naszego projektu nie wybraliśmy dialektu SQL (a jest ich kilka). Kliknij po prawej stronie tego samego paska na napis Zmień dialekt na… . W wyskakującym okienku kliknij Project SQL Dialect , a ponieważ naszą bazą danych jest PostgreSQL , wybieramy dialekt o tej samej nazwie. Kliknij OK Dodanie bazy danych PostgreSQL do usługi RESTful w Spring Boot.  Część 1 - 21 Przejdźmy do wypełniania naszych plików .sql . Wypełnijmy najpierw plik 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
);
Jeśli po wypełnieniu pliku jakieś słowa inne niż klienci są pisane białą czcionką, kliknij prawym przyciskiem myszy wewnątrz tekstu i ponownie wybierz Zmień dialekt -> PostgreSQL . Jak zapewne już zrozumiałeś, są to te same dane, które uzupełniliśmy podczas ręcznego tworzenia tabeli testowej. Tutaj są sformatowane w dialekcie PostgreSQL języka SQL. Teraz wypełnijmy plik 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)');
Jeśli nazwa tabeli klientów jest napisana czerwonymi literami, wszystko jest w porządku. Rzecz w tym, że jeszcze tej tabeli nie stworzyliśmy i IDEA jeszcze jej nie rozpoznaje. Aby utworzyć i zapełnić tabelę musimy wrócić do pliku application.properties i dodać tam trzy linie:
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
W tych wierszach mówimy, że chcemy programowo zainicjować bazę danych i wskazujemy, jakich plików należy w tym celu użyć. Następnie przejdź do głównej metody naszej aplikacji i uruchom ją . Następnie przejdź do pgAdmin --> Serwery --> PostgreSQL 12 --> Bazy danych --> klienci --> Schematy --> public , kliknij prawym przyciskiem myszy „ Tabele ”, „ Aktualizuj ”. Jeśli wszystko poszło dobrze, widzimy utworzoną przez nas tabelę klientów . Następnie wróć do pliku application.properties i skomentuj tę linię.
spring.datasource.data=classpath*:database/populateDB.sql
jak poniżej:
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
Jeśli tego nie zrobimy, przy następnym uruchomieniu programu otrzymamy następujący błąd: org.postgresql.util.PSQLException: BŁĄD: Zduplikowana wartość klucza narusza unikalne ograniczenie „clients_pkey” . Dzieje się tak dlatego, że w tabeli wypełniliśmy już pola o identyfikatorze 1 i 2 (nawet przy pierwszym uruchomieniu). W utworzonej przez nas tabeli pole id jest określone jako bigserial , co odpowiada typowi Long w Javie. Jednak w naszym programie typ tego pola to Integer . Postanowiłem pokazać, jak używać funkcji Long (BIGSERIAL), ponieważ ma ona większy zakres niż Integer. Faktem jest, że w tabelach pole oznaczone jako Klucz podstawowy może służyć nie tylko do przechowywania identyfikatorów użytkowników , ale także do przechowywania indeksów najróżniejszych danych, a liczba takich rekordów może przekroczyć maksymalną wartość Integer. Na przykład, jeśli nasz program co sekundę wykonuje kilka pomiarów i zapisuje dane do tabeli. Aby przepisać nasze klasy tak, aby korzystały z typu danych Long, musimy zmienić typ danych z Integer na Long we wszystkich klasach i metodach korzystających z pola id . Nie będziemy tego robić, ponieważ program został pierwotnie napisany przez autora dla typu id Integer, więc ma to jakiś sens. Aby kontynuować, usuńmy jeszcze raz utworzoną przez nas tabelę klientów z naszej bazy danych, ale teraz spróbujemy zrobić to programowo, a nie ręcznie. W tym celu zakomentuj nasz kod w pliku initDB.sql i dodaj jedną linię:
-- 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
Uruchamiamy program, przechodzimy do pgAdmin , klikamy prawym przyciskiem myszy na „ Tabele ” (w bazie naszych klientów ) - ->Aktualizuj ” i zobaczymy, że nasza tabela zniknęła. Uwaga! Zachowaj ostrożność podczas korzystania z tego polecenia, w przeciwnym razie ryzykujesz utratę wszystkich danych, które miałeś w tabeli! Wróćmy do pliku initDB.sql i przepiszemy go w następujący sposób:
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
);
Tutaj zmieniliśmy typ identyfikatora na SERIAL , który odpowiada typowi całkowitemu , którego używamy dla pola identyfikatora w naszym programie. Dodatkowo zwiększono maksymalną długość pola telefonu, dzięki czemu w jego zapisie możemy swobodnie stosować spacje i znaki specjalne (nawiasy, myślniki itp.). Maksymalna liczba cyfr w numerze telefonu wynosi obecnie 18 cyfr (o ile mnie pamięć nie myli). Dla pewności ustawiłem rozmiar na 50 znaków. Przejdźmy do pliku application.properties i odkomentujmy linię:
spring.datasource.data=classpath*:database/populateDB.sql
Uruchommy nasz program, przejdźmy do pgAdmin, sprawdźmy czy nasza tabela została utworzona i skomentujmy tę linię.
#spring.datasource.data=classpath*:database/populateDB.sql
Na tym prawdopodobnie zakończę pierwszą część artykułu. Mam nadzieję, że wam się spodoba, piszcie komentarze (nawet jeśli wam się nie podobało). W części drugiej przepiszemy nasze klasy, aby mogły współpracować z prawdziwymi bazami danych. Kontynuacja: Dodawanie bazy danych PostgreSQL do usługi RESTful podczas Spring Boot. Część 2 UPD Dziękuję moderatorom za poprawienie moich zdjęć i sformatowania tekstu!
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION