Почну з того, що мені дуже сподобався цикл статей від Еллеонори Керрі під назвою "Огляд REST". Ось посилання на ці статті:
Загалом, я вирішив взяти на себе сміливість і трохи доповнити їх. А саме, розповісти як створити базу даних та підключити її до цієї програми. З чого почати? Напевно, з самої бази даних. Я вирішив використовувати PostgreSQL , тому що мені сподобався дружній інтерфейс її адмінки. Для початку нам потрібно завантажити установник PostgreSQL, наприклад, звідси: PostgreSQL Database Download Повний процес установки я описувати не буду, т.к. він може відрізнятися залежно від ОС. Однак зазначу, що в процесі вам потрібно придумати пароль адміністратора для дефолтної ролі (облікового запису) postgres і ввести його двічі. Для простоти я встановив пароль 123 . Звичайно, в реальних проектах необхідно вигадати щось складніше.
Далі програма установки пропонує вибрати порт, я залишив його значення за промовчанням.
Locale також залишив за замовчуванням.
Встановабо, далі відкриваємо інтерфейс адміністратора pgAdmin . Відкриється браузер з віконцем, де нас попросять ввести створений раніше пароль.
Тепер нам потрібно встановити мову інтерфейсу. Для цього натискаємо Configure pgAdmin -> Miscellaneous -> User Language , вибираємо потрібну мову -> Save , і перезавантажуємо сторінку браузера .
У верхньому лівому куті сторінки натискаємо Server , з'являється віконце « Підключитися до сервера ». Вводимо пароль ще раз і ставимо галку Save Password, щоб не вводити його щоразу.
Можна було б і надалі використовувати роль адміністратора для всіх баз даних, але краще створимо нову роль, адже у нас може бути багато баз даних та багато програм, які їх використовують. Для цього у лівому верхньому куті тиснемо на PostgreSQL 12 --> ПКМ на Ролі входу/групи --> Створити --> Роль входу/групи
У спливаючому вікні на вкладці « Загальні » вписуємо ім'я ролі. Я назвав роль root .
На вкладці « Визначення » створюємо новий пароль, я залишив 123 просто щоб не заплутатися.
Переходимо на вкладку « Права » та відзначаємо всі необхідні пункти. Я встановив усі пункти « ТАК». Натискаємо " Зберегти "
Переходимо до створення бази даних. Тиснемо ПКМ на "Бази даних" --> Створити --> База даних
На вкладці " Загальні " створюємо назву бази даних. Нехай це буде, наприклад, customers . Власником призначаємо root , якого ми створабо на попередньому етапі.
На вкладці " Визначення " перевіряємо, що у нас встановлено кодування UTF8 . Натискаємо « Зберегти ». Все, наша база даних створена (поки що пуста).
У цьому можна було б закінчити з pgAdmin, т.к. таблиці ми створюватимемо програмно, але, про всяк випадок, покажу як створити таблицю вручну. Розгортаємо деревоcustomers --> Схеми --> public . Тиснемо ПКМ Таблиці --> Створити --> Таблиця .
Відкриється спливаюче вікно. На вкладці " Загальні " призначаємо ім'я нашої таблиці, наприклад test_table , власником призначаємо root .
Переходимо на вкладку " Стовпці ", натискаємо на " + " для створення нового стовпця. Вводимо ім'я “ id ” і тип даних bigserial , що еквівалентно типу Long в Java, але з авто-інкрементом (при додаванні нового запису, id автоматично збільшуватиметься на одиницю). Не NULL відзначаємо як « Так», первинний ключ теж « Так ».
Створюємо так само стовпці ” name ”, “ email ” і ” phone ”. Тип даних вибираємо character varying це відповідає типу String , але дозволяє задати максимальну довжину. Задаємо максимальну довжину імені в 200 символів для заповнення П.І.Б. в одному стовпці. Задаємо максимальну довжину email у 254 символи. Чому у email така максимальна довжина можна дізнатися тут . Для телефонного номера виділяємо 20 символів, цього має вистачити. Трохи про телефонні номери:Помилки програмістів про телефонні номери (Хабр) Не NULL у всіх стовпцях відзначаємо як « Так », якщо хочемо, щоб ці дані були обов'язковими. Натискаємо « Зберегти ». Все, таблиця створена.
Для видалення тестової таблиці натисніть ПКМ по ній (у дереві) і « видалити », т.к. вона нам більше не потрібна, адже ми створюватимемо таблиці з нашої програми. Закриваємо pgAdmin і переходимо до нашої програми. Відкриваємо IDEA із нашим проектом. Натискаємо Database у правому стовпці інтерфейсу, натискаємо на " + " для додавання нашої БД. Далі Data Source -> PostgreSQL .
У спливаючому вікні вписуємо в полеUser роль root , яку ми створабо раніше, і наш пароль 123 у полі password . У полі Database пишемо назву нашої БД customers . Натискаємо кнопку Test Connection і якщо бачимо зелену галку під нею, то все в порядку, і натискаємо кнопку OK .
Все, до БД підключабося, тепер переходимо до файлу pom.xml і додамо залежності. Для роботи з БД ORM :
Перейдемо до заповнення наших файлів .sql . Заповнимо спочатку файл initDB.sql :
- Огляд REST. Частина 1: що таке
- Огляд REST. Частина 2: комунікація між клієнтом та сервером
- Огляд REST. Частина 3: створення RESTful сервісу на Spring Boot
Загалом, я вирішив взяти на себе сміливість і трохи доповнити їх. А саме, розповісти як створити базу даних та підключити її до цієї програми. З чого почати? Напевно, з самої бази даних. Я вирішив використовувати PostgreSQL , тому що мені сподобався дружній інтерфейс її адмінки. Для початку нам потрібно завантажити установник PostgreSQL, наприклад, звідси: PostgreSQL Database Download Повний процес установки я описувати не буду, т.к. він може відрізнятися залежно від ОС. Однак зазначу, що в процесі вам потрібно придумати пароль адміністратора для дефолтної ролі (облікового запису) postgres і ввести його двічі. Для простоти я встановив пароль 123 . Звичайно, в реальних проектах необхідно вигадати щось складніше.
Далі програма установки пропонує вибрати порт, я залишив його значення за промовчанням.
Locale також залишив за замовчуванням.
Встановабо, далі відкриваємо інтерфейс адміністратора pgAdmin . Відкриється браузер з віконцем, де нас попросять ввести створений раніше пароль.
Тепер нам потрібно встановити мову інтерфейсу. Для цього натискаємо Configure pgAdmin -> Miscellaneous -> User Language , вибираємо потрібну мову -> Save , і перезавантажуємо сторінку браузера .
У верхньому лівому куті сторінки натискаємо Server , з'являється віконце « Підключитися до сервера ». Вводимо пароль ще раз і ставимо галку Save Password, щоб не вводити його щоразу.
Можна було б і надалі використовувати роль адміністратора для всіх баз даних, але краще створимо нову роль, адже у нас може бути багато баз даних та багато програм, які їх використовують. Для цього у лівому верхньому куті тиснемо на PostgreSQL 12 --> ПКМ на Ролі входу/групи --> Створити --> Роль входу/групи
У спливаючому вікні на вкладці « Загальні » вписуємо ім'я ролі. Я назвав роль root .
На вкладці « Визначення » створюємо новий пароль, я залишив 123 просто щоб не заплутатися.
Переходимо на вкладку « Права » та відзначаємо всі необхідні пункти. Я встановив усі пункти « ТАК». Натискаємо " Зберегти "
Переходимо до створення бази даних. Тиснемо ПКМ на "Бази даних" --> Створити --> База даних
На вкладці " Загальні " створюємо назву бази даних. Нехай це буде, наприклад, customers . Власником призначаємо root , якого ми створабо на попередньому етапі.
На вкладці " Визначення " перевіряємо, що у нас встановлено кодування UTF8 . Натискаємо « Зберегти ». Все, наша база даних створена (поки що пуста).
У цьому можна було б закінчити з pgAdmin, т.к. таблиці ми створюватимемо програмно, але, про всяк випадок, покажу як створити таблицю вручну. Розгортаємо деревоcustomers --> Схеми --> public . Тиснемо ПКМ Таблиці --> Створити --> Таблиця .
Відкриється спливаюче вікно. На вкладці " Загальні " призначаємо ім'я нашої таблиці, наприклад test_table , власником призначаємо root .
Переходимо на вкладку " Стовпці ", натискаємо на " + " для створення нового стовпця. Вводимо ім'я “ id ” і тип даних bigserial , що еквівалентно типу Long в Java, але з авто-інкрементом (при додаванні нового запису, id автоматично збільшуватиметься на одиницю). Не NULL відзначаємо як « Так», первинний ключ теж « Так ».
Створюємо так само стовпці ” name ”, “ email ” і ” phone ”. Тип даних вибираємо character varying це відповідає типу String , але дозволяє задати максимальну довжину. Задаємо максимальну довжину імені в 200 символів для заповнення П.І.Б. в одному стовпці. Задаємо максимальну довжину email у 254 символи. Чому у email така максимальна довжина можна дізнатися тут . Для телефонного номера виділяємо 20 символів, цього має вистачити. Трохи про телефонні номери:Помилки програмістів про телефонні номери (Хабр) Не NULL у всіх стовпцях відзначаємо як « Так », якщо хочемо, щоб ці дані були обов'язковими. Натискаємо « Зберегти ». Все, таблиця створена.
Для видалення тестової таблиці натисніть ПКМ по ній (у дереві) і « видалити », т.к. вона нам більше не потрібна, адже ми створюватимемо таблиці з нашої програми. Закриваємо pgAdmin і переходимо до нашої програми. Відкриваємо IDEA із нашим проектом. Натискаємо Database у правому стовпці інтерфейсу, натискаємо на " + " для додавання нашої БД. Далі Data Source -> PostgreSQL .
У спливаючому вікні вписуємо в полеUser роль root , яку ми створабо раніше, і наш пароль 123 у полі password . У полі Database пишемо назву нашої БД customers . Натискаємо кнопку Test Connection і якщо бачимо зелену галку під нею, то все в порядку, і натискаємо кнопку OK .
Все, до БД підключабося, тепер переходимо до файлу pom.xml і додамо залежності. Для роботи з БД ORM :
<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 Дякуємо модераторам, що поправабо мої картинки та форматування тексту!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ