Статьи Утилиты Telegram YouTube RuTube Отзывы

Статьи с тэгом «SQL»

Spring Data Rest

30 апреля 2023

Тэги: Hibernate, Spring, Spring Boot, rest, SQL, PostgreSQL, gradle, Spring Data, Kotlin, json, yaml, YouTube, руководство.

Ранее я уже приводил пример в статье CrudRepository на Kotlin, как Spring Data позволяет легко выполнять основные операции над сущностями в БД. Теперь пойдём ещё дальше и рассмотрим как Spring Data Rest позволяет избежать написания контроллеров и сервисной логики. Поскольку писать будем на Kotlin, нам придётся учитывать специфику взаимодействия с Java-кодом, на который изначально был рассчитан Spring Data Rest.

Исходники тестового проекта, адаптированного под Spring Boot 3, доступны на github. Также доступен видеогайд.

Подключаем Spring Data Rest

Для начала создадим заготовку проекта. Проще всего это сделать с помощью Spring Initializr. В настройках выбираем в качестве языка Kotlin и в качестве сборщика Gradle – Kotlin. В dependency нам нужно последовательно добавить три зависимости: Spring Data JPA, Rest Repositories и PostgreSQL Driver. В итоге файл build.gradle.kts должен содержать следующие зависимости:

Читать полностью...

Spring Data JPA, REST и Kotlin: "один-ко-многим", чтение данных

20 марта 2023

Тэги: Collections, Spring Boot, YouTube, PostgreSQL, руководство, Spring Data, Kotlin, SQL, rest.

В предыдущей статье Spring Data JPA, REST и Kotlin: обработка ошибок мы научились менять формат ответа при возникновении ошибки. А сегодня добавим в базу данных отношение «один-ко-многим». У нас уже имеется таблица country, которая содержит страны.

Содержимое таблицы country

Дочерняя таблица city

Давайте создадим новую таблицу city, которая будет содержать города. И добавим между этими таблицами связь через поле country_id в таблице city. То есть несколько разных городов могут ссылаться на одну и ту же страну. Это и есть отношение «один-ко-многим».

Диаграмма таблиц country и city
Читать полностью...

Spring Data JPA, REST и Kotlin: создание, обновление, удаление

16 марта 2023

Тэги: SQL, Spring Boot, руководство, YouTube, PostgreSQL, Kotlin, rest, Spring Data, json.

В предыдущей статье Spring Data JPA, REST и Kotlin: поиск записей мы научились искать записи по id и по части названия страны. Теперь рассмотрим, как реализовать создание записи, её обновление и удаление. Нам потребуется добавить в наше REST API три новых метода.

Data Transfer Object

Методы создания и обновления будут принимать на вход ранее созданную нами DTO (data transfer object), в которой будут указаны все параметры страны. Однако при создании id страны нам неизвестно, поэтому нужно модифицировать DTO так, чтобы оно допускало null в качестве id:

Читать полностью...

Spring Data JPA, REST и Kotlin: подключение к БД

14 марта 2023

Тэги: Spring Boot, PostgreSQL, Spring Data, Hibernate, yaml, YouTube, SQL, Kotlin, gradle, rest, руководство.

В предыдущей статье Spring Data JPA, REST и Kotlin: заготовка проекта мы сделали заготовку проекта и научились отдавать статический список стран. А сейчас разберёмся с подключением к базе.

Интеграция с базой данных

Теперь пришла пора подключиться к базе данных и научиться считывать данные из неё. Сначала создадим таблицу country и наполним её данными:

Читать полностью...

Пакетная вставка с помощью Spring JDBC API

24 ноября 2021

Тэги: SQL, Spring, Kotlin, PostgreSQL, Spring Boot, YouTube.

Давайте рассмотрим, как обеспечить пакетную вставку (batch insert) большого количества данных с помощью Spring JDBC API. Допустим, нам нужно вставить 100 000 строк в таблицу в postgres. В качестве драйвера для работы с БД используем стандартный org.postgresql:postgresql.

Мы рассмотрим несколько вариантов, начиная с самого простого и заканчивая самым быстрым, постепенно улучшая нашу реализацию. Если вам нужен финальный вариант, листайте сразу к последнему.

Данный материал доступен также в формате видео на YouTube.

Модель данных

Допустим у нас есть такая таблица для хранения истории каких-то заказов:

create table amount_history
(
    id       serial
        constraint amount_history_pk
            primary key,
    username varchar   not null,
    amount   numeric   not null,
    created  timestamp not null
);
Читать полностью...

Работа с Liquibase в Spring Boot

22 ноября 2021

Тэги: SQL, PostgreSQL, Spring Boot, gradle, Kotlin, yaml.

Liquibase позволяет автоматизировать внесение обновлений в структуру БД. Каждое изменение описывается в декларативном стиле и версионируется. Обновления накатываются в заранее определённом порядке на данную БД, если они ещё не накатывались. Автоматизация процесса наката изменений на базу данных особенно важна, если у вас несколько различных экземпляров приложений и для каждого из них требуется поддерживать свою БД.

Данный материал также доступен в формате видео на YouTube.

Подключаем liquibase к приложению

Рассмотрим работу с Liquibase на конкретном примере. С помощью Spring Initializr создадим заготовку нашего Spring Boot приложения (выбираем в качестве языка kotlin, а в качестве сборщика – gradle). В dependencies выберем компоненты Spring Web (функциональность rest-контроллеров), Spring Data JDBC (работа с БД), PostgreSQL Driver (драйвер нашей СУБД) и сам Liquibase Migration. В итоге файл build.gradle.kts в секции dependencies должен содержать следующие зависимости:

Читать полностью...

Рекурсивный запрос на postgres

21 ноября 2021

Тэги: PostgreSQL, SQL, YouTube.

Когда различные иерархии находятся в пределах одной таблицы, может потребоваться пройтись по одной из веток этой иерархии, начиная с самого нижнего элемента и заканчивая корневым. Примером иерархических данных может служить структура каталогов на файловой системе, оргструктура в компании или справочник географических объектов (города-страны-континенты).

PostgreSQL предоставляет специальный синтаксис with recursive для написания рекурсивных запросов. Эти запросы позволяют легко выбирать иерархические данные.

Данный гайд также доступен в формате видео на YouTube.

Рассмотрим конкретную таблицу:

Читать полностью...

RowMapper и ResultSetExtractor в Spring Boot

3 августа 2021

Тэги: Spring Boot, rest, SQL, PostgreSQL, Java.

Spring Boot предоставляет два интерфейса для обработки выборки из БД: RowMapper и ResultSetExtractor. Давайте разберём их назначение, а также выясним, чем они различаются на примере справочника городов и стран.

RowMapper

Чаще всего при работе со списками в restful-сервисах, построенных на Spring Boot, вы будете использовать RowMapper. Этот класс обрабатывает отдельно каждую запись, полученную из БД, и возвращает уже готовый объект – модель данных. В большинстве случаев его вполне хватает.

Создадим простенький rest-контроллер, который будет возвращать список всех стран. Эти страны будем хранить в БД. Определение таблицы в СУБД postgres выглядит следующим образом:

CREATE TABLE public.country
(
  id serial,
  name character varying(50) NOT NULL,
  CONSTRAINT country_pk PRIMARY KEY (id)
)

Здесь тип serial представляет собой обычный integer, который автоматически увеличивается на 1 при добавлении каждой новой записи. То есть нет нужды при вставке явно указывать id.

Добавим туда несколько стран для примера:

insert into country (name) values ('Германия'); -- id = 1
insert into country (name) values ('Франция');  -- id = 2
insert into country (name) values ('Италия');   -- id = 3
Читать полностью...

Написание запросов в Spring Data JPA

4 ноября 2020

Тэги: SQL, Collections, Spring Boot, Spring Data, Kotlin, Hibernate, PostgreSQL.

В статье CrudRepository на Kotlin я рассказывал о том, как Spring Data позволяет быстро создавать слой взаимодействия с БД, поддерживающий все основные операции: создание, чтение, обновление и удаление. Для получения этой стандартной функциональности вам достаточно лишь определить класс-сущность, поля которой такие же как и в целевой таблице в БД, и интерфейс самого репозитория, который можно унаследовать от стандартного интерфейса CrudRepository. Реализовывать интерфейс при этом не нужно – Spring Data всё сделает за вас.

Помимо стандартных методов вы также можете добавить в этот интерфейс свои собственные. Причём если вы будете следовать соглашениям об именовании методов, то Spring Data будет автоматически генерировать по ним sql-запросы. То есть вы определяете запросы к БД в декларативном стиле. Это, во-первых, позволяет давать методам удобочитаемые имена, а во-вторых, позволяет абстрагироваться от конкретной СУБД и специфики написания запросов к ней.

Читать полностью...

Как сделать полный бэкап базы на postgres

29 апреля 2018

Тэги: PostgreSQL, руководство, SQL, файлы.

Для создания полного бэкапа базы на postgres воспользуемся утилитой pg_dump. Бэкап представляет собой текстовый файл с sql-синтаксисом. При этом данные вставляются в более компактном виде.

Перейдём в целевой каталог, в котором планируется сохранить файл бэкапа. Затем выполняем команду:

pg_dump имя_базы -h хост -p порт -U пользователь > имя_файла_бэкапа.sql

Разумеется, подключиться можно как к локальной базе, так и к базе, расположенной на сервере. После того, как файл создался, можем приступить к созданию копии.

Для начала создайте базу (её имя может быть любым), а также пользователя, имя которого должно совпадать с именем пользователя, который работает с исходной базой. Скорее всего, это имя, которое вы использовали для параметра -U в команде, указанной выше. Но точнее лучше посмотреть в полученном файле бэкапа. В скрипте создания таблиц можно увидеть строчку вида:

alter table имя_базы owner to имя_пользователя;
Читать полностью...

❮ Назад Далее ❯