O que veremos por aqui:
- Criar o Método getByTitulo(String titulo) para listar uma Postagem específica
Nas etapas anteriores, começamos a construir a Classe PostagemController e implementamos os Métodos:
- getAll() 🡪 Retorna todos os Objetos da Classe Postagem persistidos no Banco de dados.
- getById(Long id) 🡪 Retorna um Objeto específico da Classe Postagem persistidos no Banco de dados. A Postagem é identificada pelo Atributo id.
Vamos continuar a construção da nossa Classe Controladora implementando o Método getByTitulo( String titulo ), que retornará todos os Objetos da Classe Postagem persistidos no Banco de dados, cujo Atributo titulo contenha a String enviada no parâmetro titulo do Método.
classDiagram
class Postagem {
- Long id
- String titulo
- String texto
- LocalDateTime data
+ getAll() ResponseEntity List ~Postagem~
+ getById(Long id) ResponseEntity ~Postagem~
+ getByTitulo(String nome) ResponseEntity List ~Postagem~
+ post(Postagem postagem) ResponseEntity ~Postagem~
+ put(Postagem postagem) ResponseEntity ~Postagem~
+ delete(Long id) void
}
Para implementarmos o Método de Consulta por título getByTitulo(String titulo) será necessário criar uma Query Methods na Interface PostagemRepository. Desta forma, o Diagrama de Classes da nossa Interface sofrerá uma alteração:
classDiagram
class PostagemRepository {
<<interface>>
+ findAllByTituloContainingIgnoreCase(String titulo) List ~Postagem~
}
Query Methods são métodos de consulta personalizados, definidos na interface repositório, que permitem buscar por qualquer atributo da entidade associada. O Spring Data interpreta o nome do método e gera dinamicamente a consulta correspondente em JPQL, que depois é convertida em SQL nativo pelo provedor JPA (como o Hibernate).
Na prática, as Query Methods permitem gerar instruções de consulta em JPQL com base na combinação entre palavras-chave e nomes de atributos da entidade. O Spring Data interpreta o nome do método e cria dinamicamente a consulta correspondente.
JPQL (Java Persistence Query Language) é a linguagem de consulta orientada a objetos utilizada no JPA (Java Persistence API). Ela é similar ao SQL, mas opera sobre entidades Java e seus atributos, em vez de tabelas e colunas do banco de dados.
Na prática, quando você escreve uma Query Methods:
- O Spring Data JPA interpreta o nome do método.
- Ele gera dinamicamente uma consulta em JPQL com base nesse nome.
- A consulta JPQL gerada é convertida pelo provider JPA (Hibernate) em uma consulta SQL nativa, que será executada no banco.
Graças ao JPQL, o JPA consegue operar em qualquer Banco de dados Relacional, sem a necessidade de reescrever métodos ou consultas.
Exemplo 01:
Query Method
public Optional <Postagem> findByTitulo(String titulo);Instrução SQL equivalente
SELECT * FROM tb_postagens WHERE titulo = "titulo";| Palavra Chave | Instrução SQL | |
|---|---|---|
| find | 🡪 | SELECT |
| By | 🡪 | WHERE |
| Titulo | 🡪 | Atributo da Classe Postagem |
| String titulo | 🡪 | Parâmetro do Método contendo o título que você deseja procurar. |
Como esta consulta retornará apenas um Objeto da Classe Postagem ou um Objeto Nulo, caso a consulta não encontre nada, o Método foi assinado com apenas um Objeto da Classe Postagem do tipo Optional para evitar o erro NullPointerException (Objeto Nulo).
Exemplo 02:
Query Method
public List <Postagem> findAllByTituloContainingIgnoreCase(String titulo);Instrução SQL equivalente
SELECT * FROM tb_postagens WHERE titulo LIKE "%titulo%";| Palavra Chave | Instrução SQL | |
|---|---|---|
| find | 🡪 | SELECT |
| All | 🡪 | * |
| By | 🡪 | WHERE |
| Titulo | 🡪 | Atributo da Classe Postagem |
| Containing | 🡪 | LIKE "%titulo%" |
| IgnoreCase | 🡪 | Ignorando letras maiúsculas ou minúsculas |
| @Param("titulo") | 🡪 | Define a variável String titulo como um parâmetro da consulta. Esta anotação é opcional em consultas do tipo Like. |
| String titulo | 🡪 | Parâmetro do Método contendo o título que você deseja procurar. |
Como esta consulta retornará um ou mais Objetos da Classe Postagem, o Método foi assinado com uma Collection List de Objetos da Classe Postagem.
![]() |
ATENÇÃO: A instrução FROM tb_postagens será inserida pelo JPA ao checar o nome da tabela gerada pela Classe Postagem. |
|---|
![]() |
DICA: Acesse o Guia do JPA e explore outras opções de Query Methods (Métodos de Consulta), com exemplos implementados. Pedimos apenas que não implemente os exemplos do Guia no Projeto Blog Pessoal. |
|---|
O Exemplo 02 será criado dentro da Interface PostagemRepository e será implementado na Classe PostagemController. Veja o código abaixo, implementado na Interface:
Observe que a Query Method do Exemplo 02 foi adicionada na linha 12 da Interface PostagemRepository. Observe que depois de Criar a Query Methods foram importados mais 2 pacotes na Interface PostagemRepository, como mostra a imagem acima (indicados pelas Setas vermelhas).
Para concluir, não esqueça de Salvar o código (File 🡪 Save All) .
Vamos implementar o Método getByTitulo(String titulo) na Classe Postagem Controller. Traçando um paralelo com o MySQL, seria o equivalente a instrução: SELECT * FROM tb_postagens where titulo like "%titulo%";.
Linha 37: a anotação @GetMapping indica que o Método getAll(), responderá a todas as requisições do tipo HTTP GET, enviadas no endereço http://localhost:8080/postagens/titulo/{titulo}.
Linha 38: O Método getByTitulo(String titulo) será do tipo ResponseEntity porquê ele responderá a Requisição HTTP (HTTP Request), com uma Resposta HTTP (HTTP Response).
✔
Linha 39: return ResponseEntity.ok(postagemRepository.findAllByTituloContainingIgnoreCase(String titulo)); Executa o Método findAllByTituloContainingIgnoreCase(String titulo) (Método personalizado, criado na Interface PostagemRepository), e exibe o resultado (
null — apenas vazia. Por isso, o ResponseEntity.ok() será retornado com status 200 OK em todos os casos.
Para concluir, não esqueça de Salvar o código (File 🡪 Save All) e verificar se o Projeto está em execução
Agora vamos criar a Requisição para o Método getByTitulo(String titulo):
- Clique com o botão direito do mouse sobre a Pasta Postagem para abrir o menu e clique na opção New HTTP Request.
-
Será criada uma nova Requisição (New Request) dentro da pasta Postagem.
-
Dê um duplo clique sobre a nova requisição (New Request), informe o nome da requisição (indicado na imagem abaixo na cor amarela) e pressione a tecla enter do seu teclado.
- Selecione o Método HTTP que será utilizado (GET) na requisição, indicado na imagem abaixo na cor verde.
- Configure a requisição conforme a imagem abaixo:
- No item marcado em amarelo na imagem acima, informe o endereço (endpoint) da Requisição. A requisição Consultar Postagem por Titulo foi configurada da seguinte maneira:
- A primeira parte do endereço (http://localhost:8080) é o endereço do nosso servidor local. Quando a API estiver na nuvem, ele será substituído pelo endereço da aplicação na nuvem.
- A segunda parte do endereço é o endpoint configurado na anotação @RequestMapping, em nosso caso /postagens.
- A terceira parte (/titulo/postagem), titulo é apenas um indicativo do conteúdo da variável que deverá ser preenchida. A palavra postagem é o conteúdo da variável de caminho (@PathVariable) titulo. Informe o texto que você deseja pesquisar.
-
Para testar a requisição, com a aplicação rodando, clique no botão
.
-
O resultado da requisição você confere na imagem abaixo:
- Observe que a aplicação além de exibir os dados de todos os Objetos da Classe Postagem persistidos no Banco de dados, no Corpo da Resposta, respeitando o critério informado na consulta (palavra postagem), ela também retornará um HTTP Status 200 🡪 OK (indicado em verde na imagem acima), informando que a Requisição foi bem sucedida!














Voltar