Рубрики
Без рубрики

Учебное пособие: Criando um CRUD utilizando Quarks Java + REST + CDI + Panache, Гибернация com Postgres (Docker) + Postman

Учебное пособие: Criando um CRUD utilizando Quarks Java + REST + CDI + Panache, Hibernate comPost… С тегом quarkus, разработчик, гибернация, java.

Учебное пособие: Criando um CRUD utilizando Quarks Java + REST + CDI + Panache, Гибернация com Postgres (Docker) + Postman

Подпишитесь на мой канал Youtube, различные материалы для Разработчиков: Подпишитесь на мой канал Youtube, различные материалы для Разработчиков:

Введение

Java программистов они “устали” услышать следующие выражения: “Java медленно!”, “Пакет java-это большой”, “время запуска медленно!”. Как способ решить это, Red Hat начала Quarkus , um framework Java nativo do Kubernetes feito sob medida para o GraalVM e OpenJDK горячая точка . O Кварки visa tornar o java платформу, лидер в средах, serverless и Kubernetes , предлагает разработчикам единую модель программирования, реактивного и обязательных

O QuarkusIO , обещает доставить пакеты меньшего размера, с время загрузки extremanente быстро, меньше потребление памяти при условии, что в сочетании с a GraalVM , O Quercus vai realizara compilação Опережающий график (AOT) . На основе лучших стандартов, интегрированной платформы, низкое потребление обработки и время загрузки, это невероятно быстро, в миллисекундах, Quarkus позволяет использовать Java в среде serverless, поддерживая атмосферу гибкой и масштабируемой.

На рисунке ниже, мы можем видеть, сравнение потребления памяти и времени загрузки + время ответ первого запроса, мы можем заметить, что Quarkus + OpenJDK + GraalVM, потребляют меньше памяти и запускаются более быстро, чем в Quarkus + OpenJDK и framework эквивалент на рынке.

Основным отличием от Quarkus в том, что он поддерживает все основные характеристики, то есть вы, не нужно изучать ничего нового. Например, вы можете использовать CDI и JAX-RS , можно также поддерживает расширения, как: Hibernate , Кафка , OpenShift , Kubernetes . На земле облако, в котором containers, Kubernetes, microservices, functions-as-a-service (Рогачев), и собственных приложений для облачных представляют высокие уровни производительности и эффективности, Quarkus приходит с очень интересной альтернативой.

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

Презентации на Мероприятии Бразилиа Dev Festival 2019

В Сентябре 2019, palestrei на события Discovery Dev Фестиваль , проведенного в Бразилии, – это событие, фаршированные много знаний и network, презентации, доступен ниже:

Практическая часть — Практические занятия (Пошаговое руководство)

Перед началом разработки приложения, необходимо соответствовать минимальным требованиям ниже:

Минимальные требования:

Дополнительные Инструкции:

Область приложение

Теперь, давайте создадим приложение, которое будет разрабатываться с Quarkus, с помощью Panache + Hibernate для настойчивости, мы будем использовать CDI para Injeçao de Dependencia e JAX-RS para a API REST.

Мы будем создавать API, чтобы Перечислить, Регистрация, Изменение и Удаление пищи.

В Quarkus имеется Archetype для создания приложения таким образом, чтобы легко, просто запустите команду ниже:

mvn io.quarkus:quarkus-maven-plugin:1.11.1.Final:create \ .com.food \ -еда \ \

$ $ cd кваркус-еда

Давайте понимать, что каждый фрагмент это значит:

$ $ mvn io.quarkus:quarkus-maven-plugin:1.11.1.Final: творить

-DprojectGroupId=br.com.food

-DprojectArtifactId=кваркус-еда

-DclassName=”br.com.food.resource. Продовольственный источник”

-Dpath=”/еда

O Quercus disponibiliza umsite chamado Quarkus.code.io , в зависимости от конфигурации проекта для создания визуальной формы, для проведения конференции, перейдите по ссылке: https://code .quarkus.io/

Сайт: код.quarks.io

Создание проекта — Выполняется команда создания

mvn io.quarkus: quarkus-maven-plugin:1.11.1.Финал:создать \

-DprojectGroupId=br.com.mp \  
-DprojectArtifactId=food \  
-DclassName="br.com.mp.FoodResource" \  
-Dpath="/food"

//Журнал пропусков [ИНФОРМАЦИЯ] Ваше приложение будет доступно на http://localhost:8080 [ИНФОРМАЦИЯ] ———————————————————————— [ИНФОРМАЦИЯ] СОЗДАЙТЕ УСПЕХ [ИНФОРМАЦИЯ] ———————————————————————— [ИНФОРМАЦИЯ] Общее время: 42.305 с [ИНФОРМАЦИЯ] Закончено: 2019-12-12T09:36:11-02:00 [ИНФОРМАЦИЯ] ————————————————————————

Блог в комплекте вы найдете здесь: https://pastebin.com/UfczCUDL

Примечание: Для создания проекта могут занять много времени, поскольку Maven будет проводить загрузки всех зависимостей

Откройте приложение в вашем Предпочтительный IDE

Для этого примера я использую InteliJ, но мне очень нравится Eclipse и Visual code, не стесняйтесь, чтобы выбрать его любимой IDE.

На рисунке ниже, мы можем увидеть структуру проекта (Maven), подчеркнув, что создание файлов в папке Docker, Dockerfile.jvm и Dockerfile.родные, что я хочу поговорить в другой статье. Чуть ниже, мы увидим файл FoodResource, этот класс отвечает на “разоблачение” API.

Управлением первоначальный проект

В терминале выполните команду ниже:

mvn compile quarkus:разработка

Результат выполнения:

Возможно, при первом запуске компилятор будет проверять, существует ли зависимость для загрузки, как в примере ниже.

[ИНФОРМАЦИЯ] Поиск проектов… [ИНФОРМАЦИЯ] [ИНФОРМАЦИЯ] —————————< br.com.mp:еда >————————— [ИНФОРМАЦИЯ] Создание продуктов питания 1.0-МОМЕНТАЛЬНЫЙ СНИМОК [ИНФОРМАЦИЯ] ——————————– [ банка ]——————————— [ИНФОРМАЦИЯ] [ИНФОРМАЦИЯ] — maven-ресурсы-плагин:2.6:ресурсы (по умолчанию-ресурсы) @ еда — [ИНФОРМАЦИЯ] Использование кодировки UTF-8 для копирования отфильтрованных ресурсов. [ИНФОРМАЦИЯ] Копирование 2 ресурсов //ЖУРНАЛ ПРОПУЩЕН [ИНФОРМАЦИЯ] —————————< br.com.mp:еда >————————— [ИНФОРМАЦИЯ] Создание продуктов питания 1.0-МОМЕНТАЛЬНЫЙ СНИМОК [ИНФОРМАЦИЯ] ——————————– [ банка ]——————————— [ИНФОРМАЦИЯ] [ИНФОРМАЦИЯ] — maven-ресурсы-плагин:2.6:ресурсы (по умолчанию-ресурсы) @ еда — 2019-12-12 15:12:19,730 ИНФОРМАЦИЯ io.quarks Quarkus 1.0.1.Финал стартовал за 0.735секунды. Прослушивание: http://0.0.0.0:8080 2019-12-12 15:12:19,740 ИНФОРМАЦИЯ io.quarkus Активирован разработчик профиля. Активировано живое кодирование. 2019-12-12 15:12:19,741 ИНФОРМАЦИЯ io.quarkus Установленные функции: [cdi, resteasy]

Полный журнал запуска приложения: https://pastebin.com/pnLdVYsc

В конце Журнала, отображается URL-адрес для доступа с помощью браузера.

io.quarks Quarkus 1.0.1.Финал стартовал за 0.735секунды. Прослушивание: http://0.0.0.0:8080

Вы можете получить доступ к API через адресов: http://localhost:8080, http://0.0.0.0:8080 или http://127.0.0.1:8080.

Чтобы перейти на страницу, просто нажмите на адрес, предоставленного в терминал или просто скопировать и вставить в ваш браузер, как показано в примере ниже:

Тестирование API/food, через браузер

URI наш API установлен первоначально в классе FoodResource.java, путь:/food

Откройте браузер и введите адрес: http://localhost:8080/food, как на изображении ниже:

Экземпляр Postgresql в Docker

Для хранения информации, пойдем una экземпляр Postgresql, используя Docker, для этого необходимо иметь Docker установлен и выполнить команду в списке ниже:

запуск docker –имя postgres-food -e” -p 5433:5432 -v ~/developer/PostgreSQL:/var/lib/postgresql/data -d postgres

Примечание: мне Пришлось изменить порт по умолчанию 5432 на 5433, уже был другой экземпляр, работающих здесь.

Мы будем тестировать соединение с Базой данных, в моем случае, я, с помощью DBeaver 6.1.0, однако, существует множество других приложений для подключения к Базе Данных PostgreSQL, ниже, ниже испытание на подключение к базе данных:

В клиенте SQL, мы откроем, что схема Базы данных, и мы понимаем, что даже пустой, не существует никаких таблица создана.

Возвращаясь к нашей применения

Возвращайтесь в свою IDE и добавьте следующие зависимости для PanacheEntity и зависимость Postgresql, данные должны быть добавлены в файл pom.xml (В корне проекта).

ио.кварки кваркус-гибернация-орм-щегольство

ввод-вывод.кварки quarkus-jdbc-postgresql

io.кварки quarkus-resteasy-jsonb

Отель Panache Entity призван облегчить осуществление сохранения слоя приложения. Кроме того, framework-res различные методы, такие как Count, ListAll(), findById, persist, delete, уже реализованы, как показано ниже код

Exemplo do PanacheEntity (сайт Retirado do: https://quarkus.io/guides/hibernate-orm-panache )

//создание персоны Person Person(); ; .из(1910, месяц. 1 ФЕВРАЛЯ); .Жив;

//persist it person.persist();

//обратите внимание, что после сохранения вам не нужно явно сохранять свою сущность: все//изменения автоматически сохраняются при фиксации транзакции.

////проверьте, является ли он постоянным, если(person.IsPersistent()){//удалить этого человека.удалить(); }

////получение списка всех физических лиц List.listAll();

//поиск конкретного человека по идентификатору .findById(PersonID);

//поиск списка всех живых людей.список(“статус”, Статус. Живой) ;

//подсчет всех людей long.count();

//подсчет всех живых людей long.count(“статус”, Статус. Живой) ;

//удалить всех живых людей Person.удалить(“статус”, Статус. Живой) ;

////удалить все лица Person.Удалить все();

Примечание: PanacheEntity это очень интересно, но я лучше буду объяснять в следующей статье.

Возвращаясь к реализации шаблона класса (Entity)

Может быть, крикнуть классу (Entidade): Food.java , dentro da pasta br.com.food.entity.

Класс: Food.java

пакет br.com.food.entity;

импорт ввода-вывода.кварки.впасть в спячку.орм.щегольство. База данных PanacheEntityBase;

импортируйте javax.persistence. *; импорт java.util. Объекты;

@Entity public class Food расширяет базу данных PanacheEntityBase {

@Id  
@GeneratedValue(strategy = GenerationType.IDENTITY)  
private Long id;  

@Column  
private String name;  

@Column  
private Double calories;

//Опустить }

Настройка подключения Базы данных в проект

Поиск файла application.properties ” в папке resources и добавьте следующие параметры:

кваркус.источник данных.url:postgresql://localhost:5433/food .postgresql. Водитель

кварки.переход в спящий режим-orm.database.generation- и- творить

Ао исполнитель nossa aplicaçao, nos deparamos com o seguinte проблема: Вызвана: org.postgresql.util. PSQLException: ФАТАЛЬНЫЙ: база данных “еда” не существует

Вызвано: org.postgresql.util. PSQLException: ФАТАЛЬНЫЙ: база данных “food” не существует в org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2468) в org.postgresql.core.v3.QueryExecutorImpl.readStartupMessages(QueryExecutorImpl.java:2587) в org.postgresql.core.v3.QueryExecutorImpl.(QueryExecutorImpl.java:134) в org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:250) в org.postgresql.core. ConnectionFactory.openConnection(ConnectionFactory.java:49) в org.postgresql.jdbc. PgConnection.(PgConnection.java:195) в org.postgresql. Driver.makeConnection(Driver.java:458) в org.postgresql. Driver.connect(Драйвер.java:260)

Решение: Создание базы данных в Postgresql, через ClienteSQL

Приложение работает с Базой Данных, настроенной

Возвращаясь к нашей IDE, мы будем запускать команду, которая будет запускать наше приложение:

$ $ mvn компилирует quarkus:dev

[ИНФОРМАЦИЯ] Поиск проектов… [ИНФОРМАЦИЯ] [ИНФОРМАЦИЯ] ————————–< br.com.еда:еда >————————– [ИНФОРМАЦИЯ] Создание продуктов питания 1.0-МОМЕНТАЛЬНЫЙ СНИМОК [ИНФОРМАЦИЯ] ——————————– [ банка ]——————————— [ИНФОРМАЦИЯ] [ИНФОРМАЦИЯ] — maven-ресурсы-плагин:2.6:ресурсы (по умолчанию-ресурсы) @ еда — [ИНФОРМАЦИЯ] Использование кодировки UTF-8 для копирования отфильтрованных ресурсов. [ИНФОРМАЦИЯ] Копирование 2 ресурсов [ИНФОРМАЦИЯ] [ИНФОРМАЦИЯ] — maven-compiler-плагин:3.8.1:компиляция (по умолчанию-компиляция) @ food — [ИНФОРМАЦИЯ] Обнаружены изменения – перекомпиляция модуля! [ИНФОРМАЦИЯ] Компиляция 2 исходных файлов в/home/marcus/Estudo/Quarkus/food/target/classes [ИНФОРМАЦИЯ] [ИНФОРМАЦИЯ] — quarkus-maven-плагин:1.0.1.Финал:dev (по умолчанию-cli) @ food — Прослушивание транспортного dt_socket по адресу: 5005 2019-12-12 16:44:24,885 ПРЕДУПРЕДИТЬ org.heb.eng.jdb.spi. SqlExceptionHelper Код предупреждения SQL: 0, SQLState: 00000 |/2019-12-12 16:44:24,891 предупреждать org.heb.eng.jdb.spi. SqlExceptionHelper таблица “еда” не существует, пропуск 2019-12-12 16:44:25,135 ИНФОРМАЦИЯ io.кварки Quarkus 1.0.1.Финал стартовал за 1.715секунды. Прослушивание: http://0.0.0.0:8080 2019-12-12 16:44:25,136 ИНФОРМАЦИЯ io.quarkus Активирован разработчик профиля. Активировано живое кодирование. 2019-12-12 16:44:25,136 INFO io.quarkus//Установленные функции: [agroal, cdi, hibernate-orm, hibernate-orm-panache, jdbc-postgresql, narayana-jta, resteasy]

Obversação 1: Так что завершить работу приложения, мы заметили, что в таблице Food был создан в базе данных.

Obvervaçao 2: Caso nao quero o comportamento de criação automatica do banco de dados, basta comentar ou remover a linha:-and-create”, de dentro do arquivo do application.свойства.

Проверки, если таблица была создана в Базе Данных.

Я надеюсь, что наслаждаюсь этой статье.

Реализация простой, бизнес-класса

Крик ума классная чамада де FoodController.java , dentro da pasta br.com.food.controller. Этот класс будет составлять содержать бизнес-правило простое.

@@ApplicationScoped общедоступный класс FoodController {

public Food update(Long id, Food food) {  
    Food foodEntity = Food.findById(id);

    if (foodEntity == null) {  
        throw new WebApplicationException("Food with id of " + id + " does not exist.", Response.Status.NOT_FOUND);  
    }

    foodEntity.setName(food.getName());  
    foodEntity.setCalories(food.getCalories());

    return foodEntity;  
}

/**  
 * This method is main purpose to show simple "Business" example  
 * @param food  
 * @return  
 */  
public boolean isFoodNameIsNotEmpty(Food food) {  
    return food.getName().isEmpty();  

} }

Реализация FoodResouce.java

Класс FoodResource, несет ответственность за предоставление API с методами для регистрации, редактирования, удаления и список всех продуктов, зарегистрированных.

пакет br.com.food.resource;//ОМИТИДО

@@Путь(“/еда”) @Производит(медиатип.APPLICATION_JSON) @Потребляет(тип среды.APPLICATION_JSON) общедоступный класс FoodResource {

@Inject  
private FoodController foodController;

@GET  
public List findAll() {  
    return Food.listAll();  
}

@POST  
@Transactional  
public Response create(Food food) {  
    Food.persist(food);  
    return Response.ok(food).status(201).build();  
}

@PUT  
@Path("{id}")  
@Transactional  
public Response update(@PathParam("id") Long id, Food food) {

    if (foodController.isFoodNameIsNotEmpty(food)) {  
        return Response.ok("Food was not found").type(MediaType.APPLICATION_JSON_TYPE).build();  
    }

    Food foodEntity = foodController.update(id, food);

    return Response.ok(foodEntity).build();  
}

@DELETE  
@Path("{id}")  
@Transactional  
public Response delete(@PathParam("id") Long id) {  
    Food foodEntity = Food.findById(id);

    if (foodEntity == null) {  
        throw new WebApplicationException("Food with id " + id + " does not exist.", Response.Status.NOT_FOUND);  
    }

    foodEntity.delete();  
    return Response.status(204).build();  
}  

}

Примечание: Обратите внимание, что можно выполнить операцию с сохранение как в уровне Resource(API), так и на бизнес-класс или даже в классе Data Access Object — DAO .

Тестирование API через Почтальон

Откройте Почтальон, выберите адрес электронной ПОЧТЫ и оцифруйте URL: http://localhost:8080/food . Кроме того, добавьте Body с данными, как показано на рисунке ниже:

Членство другой еды в Почтальон

Перечислив все продукты в Почтальон

В Почтальон, cree другой requisiçao типа Gate введите url-адрес: http://localhost:8080/food, результатом будет список всех продуктов, зарегистрированных в базе данных, как показано на рисунке ниже:

Почтальон — Обновление объекта

Чтобы обновить описание и/или калорийности пищи, просто создайте новый запрос типа “PUT”, добавьте в конец URL-кода (ID) из пищи, которую изменен. Не забудьте заполнить body, который содержит JSON-объект изменен.

Проверка записей в Базе Данных

Удаление пищи через Почтальон

С перечнем всех продуктов питания через Почтальон

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

Завершение

Это моя первая статья и я надеюсь, что вам понравилось, пожалуйста, не стесняйтесь предлагать, критиковать или хвалить. Обнимаю и до следующего.

Исходный Код

Исходный код доступен по адресу: Исходный код доступен по адресу:

Оригинал: “https://dev.to/marcuspaulo/tutorial-criando-um-crud-utilizando-quarkus-java-rest-cdi-panache-hibernate-com-postgres-docker-postman-5bk6”