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

Trabalhando com JPA, Кваркус, Щегольство и шоколадное боло

По данным центра исследований цифры взяты из моей головы, JPA является одним из спецификации Java m… С тегами бразильский разработчик, java, кварки, pt br.

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

Этот пост-это подготовка к следующему сообщение, что сделаю обновление базы данных Flyway. Пока писал, заметил, что он стоял довольно долго, потому что думал: чего несколько концепций JPA, и я хотел убедиться, что вы, благородный читатель, знаете, о чем я говорю. Так что мы будет пусть все хорошо, милый, здесь, чтобы следующий пост будет topzeira понять.

Давайте развиваться код нашей замечательной кондитерской фабрике, чтобы сохранить информацию в базе данных. После, мы будем использовать OpenAPI, чтобы проверить, что мы сделали.

Партии, код завода торты. Мы будем добавлять расширения JPA и разъем с PostgreSQL. Мы будем использовать следующую команду.

./mvnw quarkus:add-extension -Dextensions="quarkus-hibernate-orm-panache,quarkus-jdbc-postgresql"

Depois, ваш колокар в качестве конфигурации для доступа без носа применение.свойства . Этот файл будет оставаться со следующим лицом:

quarkus.datasource.db-kind = postgresql
quarkus.datasource.username = Sarah
quarkus.datasource.password = Connor
quarkus.datasource.jdbc.url = jdbc:postgresql://localhost:5432/skynet

quarkus.hibernate-orm.database.generation = update

С этим, мы сообщаем об этом в Quarkus, что мы будем использовать базу данных PostgreSQL, что пользователь, Сара, пароль Коннор, если банк вызывает на “скайнет” и работает на локальной машине на порту 5432. Также, обратите внимание, в JPA, что мы хотим, чтобы он генерировал таблицы базы данных на основе наших подразделений.

И говорить в сущности, мы будем менять класс, Торт для, что она поверните сущности persistível. Для этого, просто поменять код файла Торт.java на вот это.

package com;

import javax.persistence.Entity;

import io.quarkus.hibernate.orm.panache.PanacheEntity;

@Entity
public class Bolo extends PanacheEntity {
  public String nome;
  public String descricao;

  public Bolo() {
  }

  public Bolo(String nome, String descricao) {
    this.nome = nome;
    this.descricao = descricao;
  }

}

Более простой, чем предыдущая версия, neah?! Распространив класс PanacheEntity, Quarkus, уже много чего:

  • Позволяет использовать стандартные Активная запись ;
  • Все открытые поля рассматриваются как столбцы в базе данных (более или менее, как если бы в аннотации @Column);
  • Сущность наследует идентификатор типа long (так называемый id) self генерируется;
  • Во время компиляции, геттеры и сеттеры объекта будет создан;
  • Во время компиляции, прямой доступ к атрибутам объекта будут преобразованы в вызовы getter e сеттеры (если вы сомневаетесь, создайте сеттер и поместите Система.выход чтобы увидеть волшебство произойдет).

Мы добавили аннотации @Entity чтобы JPA знайте, что это одно из наших подразделений.

Мы также должны изменить свой класс BoloResource . Она будет со следующим лицом.

package com;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.transaction.Transactional;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.eclipse.microprofile.openapi.annotations.Operation;
import org.eclipse.microprofile.openapi.annotations.enums.SchemaType;
import org.eclipse.microprofile.openapi.annotations.media.Content;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
import org.eclipse.microprofile.openapi.annotations.parameters.Parameter;
import org.eclipse.microprofile.openapi.annotations.parameters.RequestBody;
import org.eclipse.microprofile.openapi.annotations.responses.APIResponse;

@Path("/bolo")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class BoloResource {

  @PostConstruct
  @Transactional
  public void init() {
    new Bolo("Chocolate", "Melhor bolo do mundo").persist();;
    new Bolo("Sensação", "Chocolate com morango").persist();;
  }


  @GET
  @Operation(summary = "Retorna todos os bolos cadastrados")
  @APIResponse(responseCode = "200", //
      content = @Content(//
          mediaType = MediaType.APPLICATION_JSON, //
          schema = @Schema(//
              implementation = Bolo.class, //
              type = SchemaType.ARRAY)))
  public List list() {
    return Bolo.listAll();
  }

  @Operation(summary = "Cadastra um bolo")
  @APIResponse(responseCode = "200", //
      description = "Retorna todos os todos os bolos cadastrados, incluindo o novo bolo", //
      content = @Content(//
          mediaType = MediaType.APPLICATION_JSON, //
          schema = @Schema(//
              implementation = Bolo.class, //
              type = SchemaType.ARRAY)))
  @POST
  @Transactional
  public List add(//
      @RequestBody(required = true, //
          content = @Content(//
              mediaType = MediaType.APPLICATION_JSON, //
              schema = @Schema(//
                  implementation = Bolo.class))) Bolo bolo) {
    bolo.id = null; //coisa feia, não façam isso em casa
    bolo.persist();
    return list();
  }

  @Operation(summary = "Deleta um bolo pelo nome do bolo")
  @APIResponse(responseCode = "200", //
      description = "Todos os bolos cadastrados menos aquele retirado", //
      content = @Content(mediaType = MediaType.APPLICATION_JSON, //
          schema = @Schema(implementation = Bolo.class, //
              type = SchemaType.ARRAY)))
  @DELETE
  @Path("/{nome}")
  @Transactional
  public List delete(//
      @Parameter(description = "Nome do bolo a ser retirado", required = true) //
      @PathParam("nome") String nome) {
    Bolo.delete("nome", nome);
    return Bolo.listAll();
  }
}

Здесь, мы сняли метод конструктора и создаем метод init() с аннотацией PostConstruct . Это примечание гарантирует, что метод, снятый вскоре после строительства нашего BoloResource . При вращении этого метода, мы будем регистрации двух торты инициалы.

Методы были переписаны, чтобы использовать ar и операции, которые изменяют данные в базе данных получили аннотации @Transactional . Это примечание является обязательным, чтобы операция была сделана в одной транзакции.

Не хватает только подняться в базе данных и проверить. Это будет сделано с помощью следующей команды docker , что создаст контейнер с нашими учетные данные:

docker run -e POSTGRES_USER=Sarah -e POSTGRES_PASSWORD=Connor -e POSTGRES_DB=skynet -p 5432:5432 postgres:12-alpine

Чтобы проверить, достаточно запустить следующую команду

mvn quarkus:dev

и вуаля. Служба готова играем протестировать через url localhost:8080/торт . Большое преимущество, что можно загружать сервер, что данные будут сохранены. И, если мы хотим начать все с нуля, это просто остановить контейнер docker, который мы создаем.

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

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

Важный момент, этот код является примером, и что мы хотим просто зарегистрироваться Торт. Поэтому мы ставим null в id. В реальном мире, мы не должны идти, подвергая наших организаций, но мы будем использовать Dto для этого.

Я знаю, что есть ошибка, что каждый раз, когда человек поднимается приложения, он будет регистрация новых тортов. Она будет решена в следующем уроке. Теперь, что теперь приходите учебник о flyway.

Ах, и код сегодня может быть найдено в моей github .

Оригинал: “https://dev.to/lucasscharf/trabalhando-com-jpa-quarkus-panache-e-bolo-de-chocolate-36k7”