54 - JPQL

JPQL, sigla para Java Persistence Query Language, é a linguagem de consulta utilizada no JPA para acessar dados persistidos no banco de dados. Diferentemente do SQL tradicional, que trabalha com tabelas e colunas, o JPQL é orientado a objetos, permitindo que as consultas sejam feitas diretamente sobre as entidades Java e seus atributos.

O que é JPQL?

JPQL, ou Java Persistence Query Language, é a linguagem de consulta utilizada em aplicações que utilizam JPA (Java Persistence API). Ela é parecida com SQL, mas trabalha com os nomes das entidades e seus atributos, e não diretamente com os nomes das tabelas e colunas do banco de dados.

Enquanto o SQL consulta diretamente o banco de dados, o JPQL trabalha com o modelo orientado a objetos, permitindo consultas baseadas em classes Java.

Com o JPQL é possível fazer seleções, filtros, ordenações e até junções entre entidades, tudo utilizando a sintaxe familiar do SQL, mas com foco em objetos.

Vantagens do JPQL

  • Consulta baseada em entidades, não em tabelas.
  • Portabilidade entre bancos de dados.
  • Integração direta com os repositórios do Spring Data JPA.
  • Maior legibilidade e reutilização de código.

Exemplo 1: Buscar todas as pessoas


@Query("SELECT p FROM PessoaModelo p")
List<PessoaModelo> buscarTodos();
  

Esse exemplo retorna todas as pessoas da tabela. Note que PessoaModelo é o nome da entidade, e não da tabela do banco.

Exemplo 2: Buscar por cidade


@Query("SELECT p FROM PessoaModelo p WHERE p.cidade = :cidade")
List<PessoaModelo> buscarPorCidade(@Param("cidade") String cidade);
  

Esse JPQL busca pessoas com base na cidade informada. A anotação @Param vincula o parâmetro ao valor recebido no método.

Exemplo 3: Buscar pessoas com idade maior que


@Query("SELECT p FROM PessoaModelo p WHERE p.idade > :idade")
List<PessoaModelo> maioresQue(@Param("idade") int idade);
  

Neste exemplo, são retornadas todas as pessoas com idade maior do que o valor fornecido.

Exemplo 4: Buscar pelo nome com LIKE


@Query("SELECT p FROM PessoaModelo p WHERE p.nome LIKE %:nome%")
List<PessoaModelo> buscarPorNome(@Param("nome") String nome);
  

Aqui utilizamos LIKE para realizar uma busca parcial pelo nome da pessoa.

Clique aqui para se tornar membro do canal