Статьи
YouTube-канал

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

RowMapper и ResultSetExtractor в Spring Boot

3 августа 2021

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

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 Initializr: создаём maven-проект на Java

2 августа 2021

Тэги: Java, Java 11, YouTube, Apache, Spring, Spring Boot, новости, maven.

Чтобы каждый раз не создавать с нуля Spring проект на Java и не искать последние версии зависимостей, можно воспользоваться сервисом Spring Initializr, который предоставляет интерфейс для генерации заготовки проекта с добавлением стандартных зависимостей. Их можно конфигурировать в зависимости от ваших потребностей. В качестве сборщика проекта выберем Maven, и Spring Initializr автоматически сгенерирует скрипт сборки. Затем мы скачаем эту заготовку и запустим её в IntelliJ Idea от JetBrains.

Поскольку данный процесс лучше показывать визуально, я снял подробное видео и выложил его на YouTube.

Кстати, подписывайтесь на канал, т.к. это по сути одно из первых моих видео.

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

Spring Initializr: создаём Gradle-проект на Kotlin

1 августа 2021

Тэги: YouTube, Kotlin, новости, gradle, Spring, Spring Boot.

Чтобы каждый раз не создавать с нуля Spring проект на Kotlin и не искать последние версии зависимостей, можно воспользоваться сервисом Spring Initializr, который предоставляет интерфейс для генерации заготовки проекта с добавлением стандартных зависимостей. Их можно конфигурировать в зависимости от ваших потребностей. В качестве сборщика проекта выберем Gradle, и Spring Initializr автоматически сгенерирует скрипт сборки на Kotlin DSL. Затем мы скачаем эту заготовку и запустим её в IntelliJ Idea от JetBrains.

Поскольку данный процесс лучше показывать визуально, я снял подробное видео и выложил его на YouTube.

Кстати, подписывайтесь на канал и ставьте лайки, т.к. это по сути первое моё видео.

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

Подключение Playground к GraphQL

10 апреля 2021

Тэги: gradle, Spring Boot, GraphQL, Kotlin, json.

В статье Обработка запросов с помощью GraphQL мы рассмотрели основные вопросы, связанные с выполнением запросов в GraphQL. До этого момента мы составляли запросы вручную в формате json и напрямую кидали их на сервер. Но не всегда под рукой есть удобный инструмент для выполнения POST-запросов. Кроме того, вы можете в принципе не знать, какие поля и методы GraphQL доступны на сервере. Поэтому к GraphQL можно прикрутить один из нескольких веб-интерфесов, который позволит выполнять тестовые запросы в наглядном виде.

Подключение Playground к проекту

Для примера возьмём такой инструмент как Playground. Просто добавим ещё одну зависимость playground-spring-boot-starter в уже существующий проект, который мы создали в прошлой статье.

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

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

4 ноября 2020

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

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

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

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

CrudRepository на Kotlin

29 октября 2020

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

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

В качестве примера возьмём сервис, работающий с музыкальными группами. У группы есть три основных параметра: название, количество участников и дата основания. Структура таблицы в postgres может выглядеть следующим образом:

create table band
(
  id serial,
  name character varying(50) not null,
  players_count integer not null,
  created date not null,
  constraint band_pk primary key (id)
);

Тип данных serial означает поле, значение которого автоматически увеличивается на 1 с каждой новой записью.

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

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

Spring Data Rest с примерами на kotlin

25 октября 2020

Тэги: Hibernate, Spring, Spring Boot, rest, SQL, PostgreSQL, gradle, Spring Data, Kotlin, json, yaml.

Ранее я уже приводил пример в статье CrudRepository на Kotlin, как Spring Data позволяет легко выполнять основные операции над сущностями в БД. Теперь пойдём ещё дальше и рассмотрим как Spring Data Rest позволяет избежать написания контроллеров и сервисной логики. Исходники тестового проекта также прилагаются к этой статье и доступны на github. Также доступен видеогайд.

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

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

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

Подключение Swagger к Spring Boot

3 октября 2020

Тэги: Spring Boot, Spring, gradle, Kotlin, YouTube.

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

Внимание! Для последних версий Spring Boot данная статья уже не актуальна. См. статью Springdoc для документации REST API.

Помимо данной статьи вы можете также посмотреть видеогайд на эту тему.

Подключение

Если ваше приложение основано на Spring Boot, для подключения swagger достаточно добавить всего лишь одну зависимость (пример для gradle):

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

Сравнение форматов конфига в Spring Boot

16 февраля 2020

Тэги: Spring Boot, Java, Collections, Spring, XML, json, yaml.

Spring Boot позволяет хранить настройки приложения в файле и получать к ним доступ в декларативном стиле. Этот файл может иметь один из трёх форматов: properties, xml и yaml. Как Spring будет интерпретировать формат файла, определяется его расширением. Далее мы рассмотрим плюсы и минусы каждого формата. В качестве примера предположим, что в конфиге мы храним число, текстовую строку на русском языке и список значений.

properties-файл

По умолчанию в Spring используется properties-конфиг. Имя файла должно начинаться со слова application и иметь расширение properties. Если вы не используете профили для разделения конфигов, то достаточно иметь файл application.properties.

# числовой параметр
some.test.numberValue=42
# текстовый параметр
some.test.textValue="Текстовый параметр из properties-файла"
# список значений
some.test.list[0]=one
some.test.list[1]=two
some.test.list[2]=three

В данном формате комментарии всегда начинаются с новой строки и с символа «#». Имя каждого параметра прописывается полностью (и это один из недостатков данного формата), затем идёт «=», затем само значение. Текстовые значения можно указывать как в кавычках, так и без них. Список значений, который в нашем приложении превратится в объект типа List, в конце имени каждого значения имеет индекс в квадратных скобках. Такой синтаксис похож на объявление массива.

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

Spring Boot: преобразование объекта в json

26 января 2020

Тэги: Spring Boot, Java 10, rest, json.

Spring Boot значительно упрощает преобразование объекта в json. Предположим, у нас есть такой класс, содержащий какую-то информацию о пользователе:

public class User {
    private String firstName;
    private String lastName;
    private int age;

   // далее идут get- и set-методы для указанных полей...
}

Создадим контроллер, который будет его возвращать.

@RestController
public class JsonController {

    @GetMapping
    public User getUser() {
        var user = new User();
        user.setFirstName("Сигизмунд");
        user.setLastName("Петров");
        user.setAge(23);
        return user;
    }
}

Этих двух классов достаточно, чтобы вы уже могли получать информацию о пользователе в формате json! Выполнив GET-запрос к вашему приложению (по умолчанию http://127.0.0.1:8080/), вы получите такой json:

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

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