JPA – Consultas utilizar JPQL ou Criteria ?

Neste tutorial irei explicar como fazer consultas em uma aplicação JPA, utilizando JPQL e Criteria.

O que é JPQL ?
Java Persistence Query Language, ele é utilizado para fazer consultas em um banco de dados relacional. A sintaxe dele é muito semelhante ao SQL. Ele retorna um objeto entidade, ao invés de um campo resultado, a partir de um banco de dados, como é no SQL convencional.

O que é Criteria ?
Criteria é uma Api Java, que é usada para definir consultas para entidades. É uma forma alternativa de se fazer consultas. Essas consultas são seguras quanto ao tipo, portáveis e fáceis de modificar alterando sua sintaxe.

O método mais rápido de se fazer consultas , é o método nativo, native query, mas só se deve utilizá-la, em último caso, se forem esgotadas todas as possibilidades com o JPQL e Criteria.
Mas entre JPQL e Criteria, Criteria é mais rápido.

Por uma questão didática, não codificarei do zero os exemplos, eles já estão codificados.

Segue a estrutura JPQL

JPA

A instância EntityManager é usada para criar o objeto Query. O objeto Query é usado para criar um objeto de consulta.
O método getResultList do objeto Query, serve para executar uma consulta, e essa consulta retorna uma coleção de entidades, e esse resultado é carregado em uma lista.

Segue a estrutura Criteria

JPA

A instância do EntityManager é usada para criar um objeto CriteriaBuilder.
A instância do CriteriaQuery é usada para criar um objeto de consulta.
O método from do objeto CriteriaQuery é chamado para definir a raiz da consulta, a origem da consulta.
O objeto Predicate é responsável pelos critérios da pesquisa, os critérios da cláusula Where. Eu posso adicionar vários critérios nessa lista de Predicates.
O método like do objeto CriteriaBuilder, é chamado para adicionar o critério de fazer like em determinado atributo da cláusula Where.
O método where do objeto CriteriaQuery é chamado para adicionar a cláusula Where na consulta, e converter a lista de Predicates.
A instância do EntityManager é usada para criar um objeto TypedQuery. A instância TypedQuery é usada para preparar uma consulta para execução, e especificar o tipo do resultado da consulta.
O método getResultList do objeto TypedQuery serve para executar uma consulta, e essa consulta retorna uma coleção de entidades, e esse resultado é carregado em uma lista.

Para se testar a aplicação foi criado um teste integrado, chamado TesteCrudJpa.java, para ser utilizado com o Junit. Nesse teste tem trecho de codificações para testar os métodos de consulta das classes dao, que se utilizam de JPQL e Criteria, assim como mostrados anteriormente.

Testando o método que usa Criteria da classe CategoriaDao

JPA

Testando o método que usa JPQL da classe BlogDao

JPA

Segue um exemplo de aplicação Java com JPA, de como fazer consultas utilizando JPQL e Criteria.

Baixar Código-Fonte via GitHub

No vídeo abaixo, irei mostrar este tutorial.

Para ver o vídeo no YouTube Clique Aqui

Por favor, deixe seu like se gostar da dica.

Fonte: https://www.oracle.com/technical-resources/articles/vasiliev-jpql.html
https://docs.oracle.com/javaee/7/tutorial/persistence-criteria.htm

Esta entrada foi publicada em Java SE. Adicione o link permanenteaos seus favoritos.

Os comentários estão encerrados.