Почну з того, що мені дуже сподобався цикл статей від Еллеонори Керрі під назвою "Огляд REST". Ось посилання на ці статті:
- Огляд REST. Частина 1: що таке
- Огляд REST. Частина 2: комунікація між клієнтом та сервером
- Огляд REST. Частина 3: створення RESTful сервісу на Spring Boot
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Для створення REST контролера:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
Для сервера Tomcat:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
Для PostgreSQL:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.10</version>
</dependency>
Розібралися з pom.xml, перейдемо в папку resources, і заповнимо файл application.properties так:
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
Тут ми прописали URL нашої бази даних, повідомабо логін та пароль для неї, прописали драйвер для PostgreSQL, позначабо, що будемо використовувати тип даних PostgreSQL та прописали діалект для Hibernate. Далі створимо в тій же папці ресурсів нову директорію під назвою database . У цій директорії створимо 2 файли: initDB.sql і populateDB.sql . Перший відповідатиме за створення таблиць, другий за початкове їх заповнення. Відкриємо initDB.sql і побачимо зверху зелену смужку з написом SQL dialect is not configured . Це означає, що ми не вибрали діалект SQL для нашого проекту (а їх є кілька). Натискаємо праворуч на цій же смужці на напис Change dialect to…. У спливаючому віконці тиснемо Project SQL Dialect , і оскільки база даних у нас PostgreSQL , то вибираємо однойменний діалект. Тиснемо ОК Перейдемо до заповнення наших файлів .sql . Заповнимо спочатку файл 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
);
Якщо у вас після заповнення файлу якісь слова окрім clients написані білим шрифтом, то натисніть ПКМ усередині тексту і виберіть ще раз Change Dialect --> PostgreSQL . Як ви напевно вже зрозуміли, це ті самі дані, які ми заповнювали при створенні тестової таблиці вручну. Тут вони оформлені на діалекті PostgreSQL мови SQL. Тепер заповнимо файл 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)');
Якщо назва таблиці clients у вас написана червоними літерами, нічого страшного. Справа в тому, що ми ще не створабо цю таблицю, і IDEA її поки що не дізнається. Для того, щоб створити та заповнити таблицю, нам потрібно повернутися до файлу application.properties і додати туди три наступні рядки:
spring.datasource.initialization-mode=ALWAYS
spring.datasource.schema=classpath*:database/initDB.sql
spring.datasource.data=classpath*:database/populateDB.sql
У цих рядках ми говоримо, що хочемо ініціалізувати БД програмно і вказуємо, які файли потрібно для цього використовувати. Далі переходимо в метод main нашого додатка, і запускаємо його . Після цього йдемо в pgAdmin --> Servers --> PostgreSQL 12 --> Бази даних --> customers --> Схеми --> public , натискаємо ПКМ на " Таблиці ", " Оновити ". Якщо все пройшло успішно, то бачимо створену таблицю clients . Після цього переходимо назад у файл application.properties та закоментуємо рядок.
spring.datasource.data=classpath*:database/populateDB.sql
як показано нижче:
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
Якщо ми цього не зробимо, то при наступному запуску програми отримаємо таку помилку: org.postgresql.util.PSQLException: ПОМИЛКА: значення ключа, що повторюється, порушує обмеження унікальності "clients_pkey" . Це відбувається тому, що ми вже заповнені в таблиці поля з id 1 і 2 (ще при першому запуску). У створеній нами таблиці поле id вказане як bigserial , що відповідає типу Long Java. Однак у нашій програмі для цього поля використовується тип Integer. Я вирішив показати використання Long (BIGSERIAL), тому що це більший діапазон ніж Integer. Справа в тому, що в таблицях поле, позначене як Primary Key може використовуватися не тільки для зберігання id користувачів, але і для зберігання індексів різних даних, і кількість таких записів може перевищити максимальне значення Integer. Наприклад, якщо наша програма щомиті робить якісь виміри і записує дані в таблицю. Для того, щоб переписати наші класи під використання типу Long даних, нам необхідно поміняти тип з Integer на Long у всіх класах і методах, де використовується поле id . Ми цього робити не будемо, бо спочатку програма була написана автором під тип idInteger, отже, у цьому є якийсь сенс. Щоб продовжити, ще раз видалімо створену нами таблицю clients з нашої БД, але тепер ми спробуємо зробити це програмно, а не вручну. Для цього закоментуємо наш код у файлі 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
-- );
DROP TABLE IF EXISTS clients
Запустимо програму, перейдемо в pgAdmin , натиснемо ПКМ на " Таблиці " (у нашій базі даних customers ) -> " Оновити ", і побачимо, що наша таблиця зникла. NB! Будьте обережні за допомогою цієї команди, інакше ви ризикуєте втратити всі дані, які були у вашій таблиці! Повернемося до файлу initDB.sql і перепишемо його наступним чином:
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
);
Тут ми змінабо тип id на SERIAL , що відповідає типу Integer , який ми використовуємо для поля id у нашій програмі. Крім того, було збільшено максимальну довжину поля phone, щоб ми могли вільно використовувати пробіли та спеціальні символи (дужки, тире та ін.) у його написанні. Максимальна кількість цифр у телефонному номері зараз становить 18 цифр (якщо мені не змінює пам'ять). Я встановив розмір 50 символів, щоб вистачило напевно. Перейдемо у файл application.properties, коментуємо рядок:
spring.datasource.data=classpath*:database/populateDB.sql
Запустимо нашу програму, зайдемо в pgAdmin, перевіримо, що наша таблиця створена, І закоментуємо цей рядок назад.
#spring.datasource.data=classpath*:database/populateDB.sql
На цьому першу частину статті мабуть закінчу. Сподіваюся, вона вам сподобається, пишіть коментарі (навіть якщо не сподобалося). У другій частині ми перепишемо наші класи, щоб вони могли працювати з реальними базами даних. Продовження: Додаємо БД PostgreSQL до RESTful сервісу на Spring Boot. Частина 2 UPD Дякуємо модераторам, що поправабо мої картинки та форматування тексту!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ