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
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
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
Testando o método que usa JPQL da classe BlogDao
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