Модель
В этой и следующих двух главах мы будем разрабатывать простейший сайт для работы со списком задач.
Исходники этого проекта можно скачать здесь.
Структура данных
Мы работаем с SQL базой данных. Это означает, что все данные, которые мы будем использовать, должны храниться в табличном виде.
Для начала определимся с полями объекта задачи, а потом свяжем её с базой данных. Для этого
создадим пакет entities
(сущности) и в нём создадим класс Tasks
У любой записи в табличных БД должен быть уникальный идентификатор, чаще всего - это просто уникальное целое число. Его тоже необходимо добавить в список полей нашего класса.
- Task.java
package com.example.demo.entities;
/**
* Класс задачи
*/
public class Tasks {
/**
* Id
*/
private Integer id;
/**
* Заголовок
*/
private String title;
/**
* Автор
*/
private String author;
/**
* Текст
*/
private String text;
/**
* Конструктор по умолчанию
*/
public Task() {
}
/**
* Получить id
* @return id
*/
public Integer getId() {
return id;
}
/**
* Получить заголовок
* @return заголовок
*/
public String getTitle() {
return title;
}
/**
* Получить автора
* @return автор
*/
public String getAuthor() {
return author;
}
/**
* Получить текст
* @return текст
*/
public String getText() {
return text;
}
/**
* Задать id
* @param id id
*/
public void setId(Integer id) {
this.id = id;
}
/**
* Задать заголовок
* @param title заголовок
*/
public void setTitle(String title) {
this.title = title;
}
/**
* Задать автора
* @param author автор
*/
public void setAuthor(String author) {
this.author = author;
}
/**
* Задать текст
* @param text текст
*/
public void setText(String text) {
this.text = text;
}
}
Довольно значительная часть кода тривиальна и предсказуема. Чтобы не писать геттеры и сеттеры,
достаточно дописать аннотацию @Data
при объявлении класса. А чтобы не создавать конструктор
по умолчанию добавляется аннотация @NoArgsConstructor
.
- Task.java
package com.example.demo.entities;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Класс задачи
*/
@Data
@NoArgsConstructor
public class Tasks {
/**
* Id
*/
private Integer id;
/**
* Заголовок
*/
private String title;
/**
* Автор
*/
private String author;
/**
* Текст
*/
private String text;
}
Так получается гораздо компактнее. Конструктор по умолчанию при помощи lombok
мы создаём для того, чтобы
работала база данных.
Idea
Чтобы работать с базой данных для начало необходимо настроить подключение к ней. Для этого откройте
вкладку Database
.
В развернувшемся окне нажмите на +
.
В раскрывшемся меню выберите Data Source->PostgreSQL
Если у вас ещё не установлен драйвер для работы с PostgreSQL
, то система в левом
нижнем углу выведет сообщение об этом. Просто нажмите на кнопку Download
Дождитесь, пока все драйвер скачается и установится
Заполните теперь данные подключения, указанные в настройках PostgreSQL ресурса в Heroku.
И нажмите на кнопку Test Connection
Дождитесь окончания проверки
Если данные введены верно, вы увидите сообщение в таком духе
Дождёмся загрузки базы данных
И развернём её дерево
Таблица
Теперь нам необходимо создать саму таблицу для хранения данных.
Все таблицы лежат в папке public
. Чтобы создать новую таблицу, кликните
по папке public
правой кнопкой мыши и в контекстном меню выберите New->Table
.
Возможно, вам придётся сначала открыть папку schemas
, уже в ней будет папка public
Сначала укажите название таблицы tasks_table
Теперь нажмите на +
, появится новое поле. Дадим ему название id
и укажем тип int
.
Т.к. id - это основной способ поиска записей, то мы должны у этого поля поставить
галочки Primary Key
(основной ключ, основная колонка), Not null
- не может быть равен null
,
Unique
- уникальный и Auto Inc
- автоматически увеличивающийся.
Теперь добавим текстовую колонку title
Добавим оставшиеся два поля и нажмём Execute
Дождёмся теперь, пока обработается наш запрос на изменение базы данных
Теперь в список таблиц добавилась созданная нами
Если два раза кликнуть по таблице, то откроется окно её просмотра. Пока что записей нет, поэтому и таблица пустая
Persistence
В java есть готовая библиотека, которая качественно упрощает работу с базами данных.
Она называется javax.persistence
.
Чтобы показать, что рассматриваемый нами класс должен храниться в БД, используется
аннотация @Entity
, чтобы он хранился в определённой таблице,
необходимо использовать аннотацию @Table
.
Также необходимо указать, что поле id
- не просто поле, а id
именно в смысле баз данных @Id
.
Чтобы id
генерировался автоматически, нужна аннотация @GeneratedValue
- Tasks.java
package com.example.demo.entities;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
/**
* Класс задачи
*/
@Entity
@Table(name = "tasks_table")
@Data
@NoArgsConstructor
public class Task {
/**
* Id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
/**
* Заголовок
*/
private String title;
/**
* Автор
*/
private String author;
/**
* Текст
*/
private String text;
}
Запустим сервер, чтобы убедиться, что всё работает корректно.