Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Saiba por que o MongoDB foi selecionado como um líder no 2024 Gartner_Magic Quadrupnt()
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
MongoDBchevron-right

Construindo o aplicativo Quakus com MongoDB e Panache

Aasawari Sahasrabuddhe5 min read • Published Dec 03, 2024 • Updated Dec 03, 2024
QuarkusMongoDBJava
SNIPPET
Ícone do FacebookÍcone do Twitterícone do linkedin
logotipo de java
Avalie esse Início rápido
star-empty
star-empty
star-empty
star-empty
star-empty
Construir aplicativos com estruturas e bibliotecas sempre torna o tarefa mais simples. E quem não curte uma vida simples quando se trata de construir aplicativos complicados? Quando se trata de aplicativos Java , a escolha do Spring Data como estrutura ajuda a reduzir o código boilerplate para definir as configurações. Semelhante ao Spring, para construir aplicativos Quartokus, você pode usar o Panache. O Panache é uma biblioteca específica do Quarkus que simplifica o desenvolvimento de sua camada de persistência baseada no Hibernar.
O Panache no Quartokus simplifica o acesso aos dados minimizando o código padrão com operações CRUD integradas e consultas seguras de tipo. Ele suporta os padrões Active Record e Repository, permitindo flexibilidade na arquitetura. O Panache está totalmente integrado ao Quartokus, aproveitando tempos de inicialização rápidos e um baixo impacto de memória, tornando-o ideal para ambientes nativos da nuvem e sem servidor. Ele também fornece paginação fácil, suporta queries dinâmicas e nomeadas e funciona perfeitamente com Hibername ORM e JPA, aumentando a produtividade e mantendo o código limpo e eficiente.
Neste tutorial, criaremos um aplicação Quartokus com o Panache para executar alguns CRUD básicos com agregações para mostrar a eficiência do trabalho com o Panache. A API permite que você execute operações CRUD básicas, como adicionar, atualizar, localizar e excluir livros. Também suporta agregação ao grupo e conta livros por gênero.

Pré-requisitos

  1. Um cluster Atlas gratuito. Você pode criar seu primeiro cluster Atlas totalmente grátis!
  2. Java versão 21 e superior. Clique em Downloads para a versão mais recente.
  3. Um IDE de sua escolha.
  4. Maven ou Gradle conforme a escolha.

Definindo o projeto

Antes de entrarmos na parte real da implementação das APIs, vamos considerar duas das coisas mais importantes.
  1. Você pode criar seu cluster gratuito seguindo as etapas mencionadas na documentação ou usando um cluster existente.
  2. Crie um projeto Quartokus com Maven usando o comando abaixo.
1mvn io. quarkus:quarkus-maven-plugin:create \
2 -DprojectGroupId=io.quarkus.platform \
3 -DprojectArtifactId=quarkus-bom \
4 -DclassName="com.example.BookResource" \
5 -Dpath="/books"
3. Agora, adicione as dependências abaixo ao pom.xml.
1 <dependencies>
2 <dependency>
3 <groupId>io.quarkus</groupId>
4 <artifactId>quarkus-arc</artifactId>
5 </dependency>
6 <dependency>
7 <groupId>io.quarkus</groupId>
8 <artifactId>quarkus-rest</artifactId>
9 </dependency>
10 <dependency>
11 <groupId>io.quarkus</groupId>
12 <artifactId>quarkus-rest-client-jackson</artifactId>
13 <version>3.16.2</version>
14 </dependency>
15 <dependency>
16 <groupId>io.quarkus</groupId>
17 <artifactId>quarkus-resteasy-reactive-jackson</artifactId>
18 <version>3.15.1</version>
19 </dependency>
20 <dependency>
21 <groupId>io.rest-assured</groupId>
22 <artifactId>rest-assured</artifactId>
23 <scope>test</scope>
24 </dependency>
25
26 <dependency>
27 <groupId>io.quarkus</groupId>
28 <artifactId>quarkus-mongodb-panache</artifactId>
29 </dependency>
30
31 </dependencies>
4. Crie o aplicação completo e baixe as dependências:
1mvn clean install

Criar REST API endpoints da API REST

Após configurar o projeto , a próxima etapa é adicionar os pontos de conexão da API. Neste tutorial, usaremos a coleção de livros do cluster Atlas . A classe de modelo no projeto Quartokus adicionará os campos dentro da coleção, e a próxima etapa será realizar operações na coleção.
A coleção de livros na coleção Atlas será parecida com o seguinte:
1{
2_id: ..
3title: ..
4author: ..
5genre: ..
6year: ..
7}
Pontos de extremidade da API
  • Inserir um livro: o primeiro passo será inserir os documentos dentro da coleção. Para fazer isso, precisamos adicionar a função na classe de recurso no projeto. Uma classe de recursos é uma classe que implementa o PanacheRepository e fornece métodos para manipular entidades.
Adicione o código abaixo à classe de recurso, que injeta a classe de repositório para implementar os métodos e, em seguida, cria a chamada POST.
1 @Inject
2 BookRepository bookRepository;
3 @POST
4 public Response addBook(Book book) {
5 bookRepository.persist(book);
6 return Response.status(Response.Status.CREATED).entity(book).build();
7 }
Isso inseriria um documento simples de cada vez dentro da coleção.
A classe BookRepository com o código abaixo:
1import com.quarkusWithPanache.model.Book;
2import io.quarkus.mongodb.panache.PanacheMongoRepository;
3import jakarta.enterprise.context.ApplicationScoped;
4
5@ApplicationScoped
6public class BookRepository implements PanacheMongoRepository<Book> {
7}
  • GoGravação emmassa : o método de inserção inserirá os documentos um a um dentro da coleção. Se houver centenas ou milhares de documentos, levará muito tempo para inserir os documentos. Para economizar tempo e recursos a cada chamada, a gravação em massa inserirá todos os documentos de uma só vez. Para fazer isso, adicione o código abaixo, que executará a inserção em massa.
1 @POST
2 @Path("/bulk")
3 public Response bulkAddBooks(List<Book> books) {
4 // Prepare documents for bulk write
5 List<Document> documents = new ArrayList<>();
6 for (Book book : books) {
7 documents.add(new Document("title", book.title)
8 .append("author", book.author)
9 .append("genre", book.genre)
10 .append("year", book.year));
11 }
12 getCollection().insertMany(documents);
13
14 return Response.status(Response.Status.CREATED).entity(books).build();
15 }
O método getCollection retorna o nome do banco de dados de dados e da collection de import com.mongodb. cliente.MongoCollection pacote.
  • Encontrar todos os livros: Depois que todos os livros forem inseridos na coleção, o próximo passo é recuperar os documentos da coleção. Para obter todos os livros, crie a chamada de API abaixo como:
1@GET
2 public List<Book> getAllBooks() {
3 return bookRepository.listAll();
4 }
  • Encontrar um livro por ID: para recuperar um livro específico da coleção com base no _id, a chamada da API abaixo buscaria um único documento que correspondesse à condição.
1@GET
2 @Path("/{id}")
3 public Book getBookById(@PathParam("id") String id) {
4 return bookRepository.findById(new ObjectId(id));
5 }
  • Excluir livro por ID: semelhante à recuperação de um único documento da coleção, a exclusão excluirá o único documento com base no _id correspondente. Para fazer isso, use a API criada abaixo.
1 @DELETE
2 @Path("/{id}")
3 public Response deleteBook(@PathParam("id") String id) {
4 boolean deleted = bookRepository.deleteById(new ObjectId(id));
5 return deleted ? Response.noContent().build() : Response.status(Response.Status.NOT_FOUND).build();
6 }
  • Atualizar um livro: por fim, para atualizar o documento com base no valor _id, use o código abaixo com os valores de campo atualizados.
1@PUT
2 @Path("/{id}")
3 public Response updateBook(@PathParam("id") String id, Book book) {
4 Book entity = bookRepository.findById(new ObjectId(id));
5 if (entity == null) {
6 return Response.status(Response.Status.NOT_FOUND).build();
7 }
8 entity.title = book.title;
9 entity.author = book.author;
10 entity.genre = book.genre;
11 entity.year = book.year;
12 bookRepository.update(entity);
13 return Response.ok(entity).build();
14 }
  • Agregação (contagem de gênero): além de executar operações CRUD básicas, se desejar executar uma operação de agregação , você pode usar o código abaixo. Como exemplo, essa agregação apresentará um campo de gênero e contará os gêneros.
1@GET
2 @Path("/aggregate/genre-count")
3 public Response countBooksByGenre() {
4
5 List<Document> pipeline = new ArrayList<>();
6 pipeline.add(new Document("$group", new Document("_id", "$genre")
7 .append("count", new Document("$sum", 1))));
8
9 List<Document> result = getCollection()
10 .aggregate(pipeline)
11 .into(new ArrayList<>());
12
13 return Response.ok(result).build();
14 }

Testando a API

Para testar a API, podemos usar os seguintes cURL comandos para interagir com o servidor. Certifique-se de que o aplicação esteja em execução em http://localhost:8080 antes de enviar as solicitações.
Inserir um livro:
1curl -X POST "http://localhost:8080/books" -H "Content-Type: application/json" -d '{
2 "title": "Quarkus in Action",
3 "author": "John Doe",
4 "genre": "Programming",
5 "year": 2023
6}'
Bulk insert
1curl -X POST http://localhost:8080/books/bulk \
2 -H "Content-Type: application/json" \
3 -d '[
4 {
5 "title": "The Midnight Library",
6 "author": "Matt Haig",
7 "genre": "Fiction",
8 "year": 2020
9 },
10 {
11 "title": "Sapiens: A Brief History of Humankind",
12 "author": "Yuval Noah Harari",
13 "genre": "Non-Fiction",
14 "year": 2011
15 },
16 .......
17 ]'
Encontre todos os livros

:

1curl -X GET "http://localhost:8080/books" | jq
Encontrar um livro:
1curl -X GET "http://localhost:8080/books/672f873b421eaa0c3e4da49f" | jq
Excluir um livro:
1curl -X DELETE "http://localhost:8080/books/673f81b65750de0757a4bbfb" | jq
Atualizar um livro:
1curl -X PUT "http://localhost:8080/books/672f856f421eaa0c3e4da49e" \
2 -H "Content-Type: application/json" \
3 -d '{
4 "title": "Quarkus in Action",
5 "author": "John Doe",
6 "genre": "Programming",
7 "year": 2021
8 }'
Agregação: contagem de gênero
1curl -X GET "http://localhost:8080/books/aggregate/genre-count" | jq
Isso daria a saída para a contagem de todos os gêneros.
O código completo do aplicação está disponível no Github repositório do Github.

Conclusão

Neste tutorial, exploramos como aproveitar o poder do Panache em um aplicação Quandokus para simplificar as operações CRUD e implementar consultas de agregação . Ao aproveitar as funcionalidades integradas do Panache, reduzimos o código padrão, tornando o desenvolvimento mais rápido e eficiente. Desde a inserção de um único e vários documentos até a recuperação, atualização e exclusão deles, demonstramos como o Panache se integra perfeitamente ao MongoDB para lidar com operações de dados. Além disso, mostramos como realizar agregações, como contar livros por gênero, para extrair insights significativos dos dados.
A capacidade da Panache de trabalhar com o Hibernar ORM e o JPA, combinada com o baixo espaço ocupado pela memória e os tempos de inicialização rápidos do Query, a torna a escolha ideal para criar aplicativos nativos da nuvem, sem servidor e de alto desempenho. Com o Panache, os desenvolvedores podem se concentrar na lógica de negócios enquanto mantêm o código limpo e legível.
Se você quiser saber mais sobre o MongoDB e seus conceitos, como pesquisa vetorial, leia nosso tutorial sobre Vector Search do MongoDB com Quartokus no Centro do programador MongoDB e encontre tópicos mais interessantes. Para quaisquer perguntas relacionadas aos itens acima ou MongoDB, não se lembre de fazer uma visita ao fórum da comunidade MongoDB e fazer parte de uma discussão interessante.
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.
Iniciar a conversa

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Início rápido
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Criptografia em uso: a maciez do MongoDB para queries seguras


Dec 20, 2024 | 7 min read
Tutorial

O guia de 5 minutos para trabalhar com dados ESG no MongoDB


Aug 24, 2023 | 11 min read
Tutorial

Como construir um aplicativo web Go com Gi, MongoDB e AI


Aug 30, 2024 | 11 min read
Tutorial

A grande migração contínua: trabalhos do CDC com o Confluent Cloud e o Relational Migrator


Aug 23, 2024 | 11 min read
Sumário