Skip to main content

Модель

В этой и следующих двух главах мы будем разрабатывать простейший сайт для работы со списком задач.

cmd

Исходники этого проекта можно скачать здесь.

Структура данных

Мы работаем с SQL базой данных. Это означает, что все данные, которые мы будем использовать, должны храниться в табличном виде.

Для начала определимся с полями объекта задачи, а потом свяжем её с базой данных. Для этого создадим пакет entities (сущности) и в нём создадим класс Tasks

cmd

У любой записи в табличных БД должен быть уникальный идентификатор, чаще всего - это просто уникальное целое число. Его тоже необходимо добавить в список полей нашего класса.

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.

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.

cmd

В развернувшемся окне нажмите на +.

cmd

В раскрывшемся меню выберите Data Source->PostgreSQL

cmd

Если у вас ещё не установлен драйвер для работы с PostgreSQL, то система в левом нижнем углу выведет сообщение об этом. Просто нажмите на кнопку Download

cmd

Дождитесь, пока все драйвер скачается и установится

cmd

Заполните теперь данные подключения, указанные в настройках PostgreSQL ресурса в Heroku. И нажмите на кнопку Test Connection

cmd

Дождитесь окончания проверки

cmd

Если данные введены верно, вы увидите сообщение в таком духе

cmd

Дождёмся загрузки базы данных

cmd

И развернём её дерево

cmd

Таблица

Теперь нам необходимо создать саму таблицу для хранения данных.

Все таблицы лежат в папке public. Чтобы создать новую таблицу, кликните по папке public правой кнопкой мыши и в контекстном меню выберите New->Table.

Возможно, вам придётся сначала открыть папку schemas, уже в ней будет папка public

cmd

Сначала укажите название таблицы tasks_table

cmd

Теперь нажмите на +, появится новое поле. Дадим ему название id и укажем тип int.

cmd

Т.к. id - это основной способ поиска записей, то мы должны у этого поля поставить галочки Primary Key (основной ключ, основная колонка), Not null - не может быть равен null, Unique - уникальный и Auto Inc - автоматически увеличивающийся.

Теперь добавим текстовую колонку title

cmd

Добавим оставшиеся два поля и нажмём Execute

cmd

Дождёмся теперь, пока обработается наш запрос на изменение базы данных

cmd

Теперь в список таблиц добавилась созданная нами

cmd

Если два раза кликнуть по таблице, то откроется окно её просмотра. Пока что записей нет, поэтому и таблица пустая

cmd

Persistence

В java есть готовая библиотека, которая качественно упрощает работу с базами данных. Она называется javax.persistence.

Чтобы показать, что рассматриваемый нами класс должен храниться в БД, используется аннотация @Entity, чтобы он хранился в определённой таблице, необходимо использовать аннотацию @Table.

Также необходимо указать, что поле id - не просто поле, а id именно в смысле баз данных @Id. Чтобы id генерировался автоматически, нужна аннотация @GeneratedValue

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;
}

Запустим сервер, чтобы убедиться, что всё работает корректно.

cmd