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
- 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();
}