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

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

Удаление записи через DELETE-запрос в Spring Boot

28 декабря 2023

Тэги: Java, SQL, Spring Boot, rest, руководство.

В статье Обновление записи через PUT-запрос в Spring Boot мы научились обновлять данные в БД. Теперь попробуем создать полноценный rest-интерфейс для удаления существующих записей.

За основу возьмём наше приложение из указанной статьи. Оно состоит из трёх слоёв: репозиторий (работа с БД), бизнес-логика приложения (service) и сам rest-интерфейс (controller), который обрабатывает входящий json и генерирует исходящий.

Репозиторий

Начнём с доработки репозитория (интерфейс ProfileRepository).

void deleteProfileById(int id);

Для удаления нам достаточно знать только id записи.

В реализацию интерфейса репозитория (ProfileRepositoryImpl) добавим sql-запрос в виде константы, которую принято размещать в начале класса:

private static final String SQL_DELETE_PROFILE = "delete from profile where id = :id";
Читать полностью...

Обновление записи через PUT-запрос в Spring Boot

28 декабря 2023

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

В предыдущей статье Добавление записи через POST-запрос в Spring Boot мы научились создавать новые записи в БД. Теперь попробуем создать полноценный rest-интерфейс для обновления ранее добавленных записей.

За основу возьмём наше приложение из указанной статьи. Оно состоит из трёх слоёв: репозиторий (работа с БД), бизнес-логика приложения (service) и сам rest-интерфейс (controller), который обрабатывает входящий json и генерирует исходящий.

Репозиторий

Начнём с доработки репозитория (интерфейс ProfileRepository).

void updateProfile(String firstName, String secondName, int age, int id);

Для обновления нам потребуется указать id записи, а также остальные значимые поля.

В реализацию интерфейса dao (ProfileRepositoryImpl) добавим sql-запрос в виде константы, которую принято размещать в начале класса:

private static final String SQL_UPDATE_PROFILE =
        "update profile set first_name = :firstName, last_name = :lastName, age = :age where id = :id";
Читать полностью...

Добавление записи через POST-запрос в Spring Boot

28 декабря 2023

Тэги: Spring Boot, rest, SQL, Java, руководство, maven, json.

В статье Работа с БД в Spring Boot на примере postgresql мы узнали как читать данные из БД. Но чтение данных – это лишь малая часть всех операций, которые встречаются в типичном java-приложении. Теперь попробуем создать полноценный rest-интерфейс для добавления новых записей, их модификации и удаления.

За основу возьмём наше приложение из указанной статьи. Оно состоит из трёх слоёв: работа с БД (repository), бизнес-логика приложения (service) и сам rest-интерфейс (controller), который обрабатывает входящий json и генерирует исходящий.

Репозиторий

Начнём с доработки репозитория (интерфейс ProfileRepository), где до сих пор был только один метод чтения данных. Добавим метод вставки записи в БД:

void insertProfile(String firstName, String secondName, int age);

При добавлении новой записи нам достаточно всего три поля. id будет сгенерирован в БД автоматически.

В реализацию интерфейса ProfileRepositoryImpl добавляем sql-запросы в виде констант, которые принято размещать в начале класса:

private static final String SQL_INSERT_PROFILE =
        "insert into profile (first_name, last_name, age) values (:firstName, :lastName, :age)";
Читать полностью...

Работа с БД в Spring Boot на примере postgresql

28 декабря 2023

Тэги: Spring Boot, rest, SQL, PostgreSQL, Java, Stream API, руководство.

Данная статья является продолжением Spring Boot Restful Service, где была бы раскрыта тема работы с БД в Spring Boot. Давайте рассмотрим эту тему подробнее на примере СУБД postgresql, а в качестве основы возьмём проект, который мы делали в той статье.

Напомню, что проект представляет из себя простой restful-service, который принимает GET-запрос по HTTP и возвращает профиль пользователя по его id.

Создание и заполнение таблицы

Сам профиль содержит кроме id также имя, фамилию и возраст. Поэтому создадим таблицу profile в базе данных.

CREATE TABLE public.profile
(
    id         serial,
    first_name character varying(50) NOT NULL,
    last_name  character varying(50) NOT NULL,
    age        integer               NOT NULL,
    CONSTRAINT profile_id_pk PRIMARY KEY (id)
);

insert into profile (first_name, last_name, age)
values ('Иван', 'Петров', 23);

Для поля id можно использовать тип serial. Он представляет собой целое число, которое увеличивается на 1 автоматически при вставке новой записи в таблицу.

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

Работа с json в PostgreSQL

11 мая 2023

Тэги: SQL, json, PostgreSQL.

JSON (JavaScript Object Notation) является форматом для хранения и передачи данных в форме объектов, массивов и других значений, которые можно легко преобразовать в текстовую строку. PostgreSQL поддерживает хранение данных в формате JSON, а также множество функций для обработки и анализа JSON-данных.

В PostgreSQL JSON может храниться в столбцах таблицы, при этом можно использовать индексы для ускорения поиска и запросов. Кроме того, в PostgreSQL есть возможность использовать операторы для извлечения и модификации данных в формате JSON.

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

Аудит изменений в Spring Data JPA

4 мая 2023

Тэги: SQL, gradle, rest, Kotlin, Spring Data, PostgreSQL.

В промышленных системах бывает важно знать, кто и когда сделал изменения конкретной сущности. Прежде всего нас интересует такая информация:

  • кто создал запись
  • дата создания
  • автор последних изменений
  • дата последних изменений

Структура таблицы

Рассмотрим пример, в котором у нас есть таблица company. У компании есть id (автоинкремент) и название.

Поля аудита обычно скрыты от рядовых пользователей, но доступны администраторам системы. Скрипт создания этой таблицы в СУБД Postgres будет выглядеть так:

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

Spring Data JPA, REST и Kotlin: проекции

3 мая 2023

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

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

Список из названий стран

Давайте сделаем новый эндпоинт, который будет возвращать список названий всех стран, отсортированный по алфавиту. Кроме названий, других полей выводить не требуется. Опираясь на уже имеющиеся у нас знания из предыдущих статей, добавим в CountryRepository такой метод:

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

Виды RowMapper в Spring

2 мая 2023

Тэги: SQL, json, Spring, Hibernate, Collections, rest.

Spring Framework – это один из самых популярных Java-фреймворков, который предоставляет набор инструментов и возможностей для разработки веб-приложений. Одним из таких инструментов является интерфейс RowMapper, который используется при чтении данных из БД в объекты Java.

В Spring Framework существует несколько стандартных реализаций интерфейса RowMapper, каждый из которых предоставляет свой набор функциональности и возможностей. Рассмотрим каждый из них подробнее на конкретном примере.

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

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
Читать полностью...

Далее ❯