По данным центра исследований цифры взяты из моей головы, 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 Listlist() { 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”