В этой статье вы узнаете, как с помощью Speedment создать полный CRUD REST API для базы данных.
С каждым годом становится все очевиднее, что Spring Framework является одним из наиболее широко используемых фреймворков для веб-разработки на Java.
С приближением следующего десятилетия самый популярный модуль Spring, Spring Boot, только что получил серьезное обновление. Новая версия Spring Boot «2.2.0» и 2020 год почти идеально подходят друг другу. Поэтому команда разработки Speedment восполнила пробел, обновив плагин для Spring Boot.
Если вы впервые слышите о Speedment, вы получите удовольствие, так как мы покажем, как плагин Speedment Spring Boot позволяет разработчикам без особых усилий создавать Spring приложения баз данных с помощью Speedment, ORM с мощным интерфейсом запросов на основе Stream API.
О Speedment
Speedment можно описать как ORM, которого заслуживает сообщество Java — набор инструментов для тех, кто любит быструю разработку и еще более быстрые приложения.
Благодаря использованию Java Stream API в качестве основного средства связи с выбранной базой данных, Speedment позволяет разработчикам с опытом работы с Java чувствовать себя как дома. Помимо простого в использовании API, Speedment предоставляет разработчикам графический инструмент, который генерирует для них модель предметной области в считанные секунды.
Если вас заинтересовал Speedment в целом, перейдите по следующей ссылке для получения подробной документации с примерами. Остальная часть этой статьи будет посвящена плагину для Spring Boot.
Spring Boot: Самый быстрый старт
Плагин Speedment Spring Boot существует уже некоторое время, но в Speedment 3.2.2 была представлена основная функция — возможность генерировать весь CRUD REST API непосредственно из вашей модели базы данных.
В зависимости от того, начинаете ли вы с нуля или у вас уже есть проект, шаги будут отличаться, но будьте уверены, что процесс интеграции будет простым независимо от состояния вашего проекта.
Если вы хотите интегрировать Spring Boot в существующий Speedment проект, вам необходимо добавить следующие 2 элемента в ваш pom.xml:
<plugin>
<groupId>com.speedment.enterprise</groupId>
<artifactId>speedment-enterprise-maven-plugin</artifactId>
<version>${speedment.version}</version>
<configuration>
<components>
component>com.speedment.enterprise.plugins.spring.SpringGeneratorBundle</component>
</components>
<appName>${project.artifactId}</appName>
<packageName>${project.groupId}</packageName>
</configuration>
... // Database connector dependency
</plugin>
<dependencies>
...
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.speedment.enterprise.plugins</groupId>
<artifactId>spring-runtime</artifactId>
<version>${speedment.version}</version>
</dependency>
...
</dependencies>
После добавления этих элементов при следующей регенерации модели вашего домена должна быть сгенерирована специфичекая для Speedment конфигурация Spring. Сгенерированная конфигурация управлят свойствами соединения с базой данных и регистрации бинов для различных менеджеров, сгенерированных Speedment.
Если вы начинаете проект с нуля, перейдите на инициализатор проекта, где для вас будет создан готовый проект для Spring Boot. Как вы будете настраивать проект, зависит от вас, но чтобы включить плагин Spring Boot в сгенерированный проект, убедитесь, что установлен флажок рядом с Spring в разделе плагинов. Когда конфигурация проекта будет вас устраивать, нажмите кнопку Download (Загрузить), и вы получите готовый к использованию архив проекта.
CRUD упрощается
Как только вы установите плагин, в инструменте Speedment будут доступны некоторые специфические параметры Spring Boot, которые можно использовать для настройки вашего REST API. Вы можете запустить инструмент Speedment, выполнив следующую команду:
mvn speedment:tool
Если вы впервые используете Speedment, возможно вы захотите ознакомиться с рабочим процессом, следуя краткому руководству "Hello Speedment".
По умолчанию инструмент Speedment не генерирует REST API. Чтобы сгенерировать CRUD REST API для конкретной таблицы, выберите таблицу в древовидном представлении и установите флажок «Generate @RestController» вместе с параметром «REST Enable Create/Update/Delete». При нажатии Generate (Генерировать) будет создан набор REST mappings — URL, которые реализуют CRUD операции для конкретной таблицы.
Вот и все! Ручное кодирование не требуется. Просто запустите сгенерированный Spring проект, выполнив команду:
mvn spring-boot:run
Создание сущностей с использованием REST
Чтобы создать новую сущность, используя созданный вами REST API, вы должны выполнить запрос POST по пути, указанному в инструменте. По умолчанию имя этого пути совпадает с именем вашей таблицы, с префиксом имени вашей схемы. Если вы снимите флажок «REST Endpoint (Конечная точка REST)», вы можете указать произвольное имя пути. Тело запроса должно содержать пары ключ-значение в объекте JSON, где значения «REST Field Name (Имя поля REST)» из инструмента Speedment являются ключами.
Например, если у нас есть таблица с именем person с колонками id, name и age, мы отправим следующий запрос для создания новой сущности person:
POST localhost:8080/db/person
{
"id": 1,
"name": "Jane",
"age": 25
}
или
curl -d '{"id": 1,"name": "Jane","age": 25}' -H "Content-Type:application/json" -X POST localhost:8080/db/person
Если значение колонки id генерируется автоматически (или использует последовательность), вы можете исключить ее из тела POST. Если вы хотите принудительно исключить определенный столбец из тела POST, щелкните соответствующий столбец в представлении дерева инструментов и снимите флажок «Include in Create Body (Включить в создание тела)» и заново создайте модель вашего домена. С другой стороны, если вы хотите обеспечить наличие определенного столбца в теле POST при выполнении запроса, отметьте «Required in Create Body (Обязательно в теле создания)» и заново создайте модель вашего домена.
Получение сущностей с помощью REST
Чтобы получить наш вновь созданную сущность, мы должны выполнить запрос GET по тому же пути, который использовался для создания сущности:
GET localhost:8080/db/person
или
curl localhost:8080/db/person/1
Выполненный запрос вернет JSON Array всех существующих сущностей. В нашем случае он вернул бы массив только с нашей единственной сущностью:
[
{
"id": 1,
"name": "Jane",
"age": 25
}
]
Продвинутые концепции, такие как фильтры и сортировщики, подробно описаны в официальной документации Speedment.
Обновление существующих сущностей с помощью REST
Обновление существующей сущности с использованием REST API выполняется аналогично созданию сущности. Вместо запроса POST мы выполняем запрос PATCH, и путь расширяется идентификатором сущности. Какой идентификатор нашей сущности зависит от колонки первичного ключа этой таблицы. Поскольку наша колонка PK (первичного ключа) является числовым типом, идентификатор нашей сущности будет целым числом.
Чтобы обновить сущность, которую мы создали в нашем предыдущем примере, мы выполним следующий запрос:
PATCH localhost:8080/db/person/1
{
"name": "Mike",
"age": 43
}
или
curl -d '{"name": "Jane","age": 25}' -H "Content-Type:application/json" -X PATCH localhost:8080/db/person/1
По умолчанию все колонки включены в тело PATCH (кроме колонки первичного ключа), но они не являются обязательными. Если вы хотите принудительно исключить определенный столбец из тела запроса, щелкните соответствующий столбец в представлении дерева инструментов и снимите флажок «Include in Update Body (Включить в тело обновления)» и заново создайте модель своего домена. С другой стороны, если вы хотите обеспечить наличие столбца в теле запроса, отметьте «Required in Update Body (Обязательно в теле обновления)» и обновите модель вашего домена.
Удаление сущностей с помощью REST
Удалить сущность с помощью REST API довольно просто — мы выполняем запрос DELETE по тому же пути, который используется для обновления сущностей.
Чтобы удалить сущность, который мы создали и обновили в предыдущих примерах, мы выполнили бы следующий запрос:
DELETE localhost:8080/db/person/1
или
curl -X DELETE localhost:8080/db/person/1
Резюме
Запуск новых проектов иногда может быть хлопотным. Как разработчики, мы хотим максимально избежать этих неудобств и погрузиться прямо в кодирование. С новым плагином Speed Boot Spring Boot разработчики могут ускорить запуск новых проектов, автоматически генерируя все необходимые конфигурации и контроллеры REST непосредственно из базы данных.
Мы надеемся, что вам понравилось это краткое руководство по новым функциям CRUD, которые предоставляет плагин Speedment Spring Boot. Если вас интересует более подробное объяснение новых функций, перейдите на официальную документацию, где вы найдете подробные объяснения и примеры новых функций CRUD.
Дополнительное чтение
Creating a REST API Part 4: Handling POST, PUT and DELETE Requests
Building a Basic CRUD RESTful Spring Boot MVC Application: Getting Started With Java Spring
Автор: val6852