Alternativas

JPA Repository

Java Persistence Query Language

Introdução

Antes de começar a desfrutar dos recursos do Spring Data JPA - Repository, recomendamos a caráter de pré-requisitos praticar os conceitos de Consultas SQL em seguida JPQL utilizando os nossos conteúdos ou qualquer outra referência.

JPA Consultas - JPA Repository

O JPA Repository é uma abstração fornecida pelo Spring Data JPA, que simplifica a criação de consultas e operações CRUD, gerando automaticamente métodos padrão como findAll, findById, entre outros. Para consultas mais complexas, é possível usar métodos personalizados com JPQL ou até SQL nativo. Essa abordagem oferece simplicidade e praticidade ao trabalhar com dados, sendo ideal para projetos que buscam uma solução ágil e flexível.

Para que você possa acompanhar este exercício, é necessário que você esteja realizando-os em um projeto Spring Boot com dependencias do Spring Data JPA. Consulte nosso vídeo JPA Setup - com Spring Boot

Casos de Uso

  1. Todos os clientes, sem filtros, ordenados por nome
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;

public interface ClienteRepository extends JpaRepository<Cliente, Long> {
    // Método elaborado para buscar clientes ordenados por nome
    List<Cliente> findAllByOrderByNomeAsc();
}
No contexto do JPA Repository, o Spring Data tentará traduzir a instrução JPQL com base no nome do método, parâmetros e tipo de retorno. Para mais informações, consulte a especificação oficial no site do Spring Data.

@Query

Se suas consultas precisarem de um pouco mais de customização na elaboração do seu JPQL, use a anotação @Query para determinar para o Spring que o mesmo não deverá tentar traduzir um método mas sim executar a instrução customizada conforme ilustração abaixo:

import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;

public interface ClienteRepository extends JpaRepository<Cliente, Long> {
   // Método customizado para buscar clientes ordenados por nome
    @Query("SELECT c FROM Cliente c ORDER BY c.nome")
    List<Cliente> consultarClientesOrdenadosPorNome();
}