O Cronapp utiliza um assistente de consulta visual que facilita a criação de consultas ao banco de dados.
Visão Geral
As consultas são realizadas em JPQL (Java Persistence Query Language), que é uma linguagem de consulta ORM que atua sobre classes e objetos, diferentemente do SQL que realiza as consultas baseadas em tabelas. Apesar de a diferença estrutural a linguagem JPQL é bem semelhante ao SQL, porém a primeira possui a vantagem de que a mesma consulta pode ser realizada em todos os bancos de dados. O JPQL conta também com o assistente de consulta visual que tem como objetivo facilitar a criação de consultas ao banco de dados, além de gerar as consultas o assistente possui algumas outras funcionalidades como as exibidas abaixo:
Figura 1 - Assistente de consulta visual (Bloco de programação)
- Estrutura de Consulta - Possui as opções de criação da consulta, como adicionar a entidade desejada, selecionar campos desejados na consulta, criar regras e outros.
- Testar Consulta - Realiza o teste da consulta criada e retorna os dados correspondentes a ela em uma nova janela.
- Editar como Texto - Faz a edição da consulta visual em formato de texto.
- Visualizar como Texto - Exibe a consulta feita em formato visual em forma de texto.
- Modo de Consulta - Altera a estrutura da consulta, que pode ser por tabelas ou objetos.
- Aplicar dados da requisição - Aplica as requisições(paginação, ordenação e outros) diretamente na consulta.
- Habilitar Paginação - Realiza a paginação dos dados em uma página de forma automática.
- Ok e Cancelar - Cancela ou salva a consulta.
Estrutura da consulta
Agora vamos entender melhor as opções disponíveis na estrutura da consulta.
Figura 2 - Estrutura visual da consulta
- Entidade - Define a entidade a ser utilizada na consulta.
- Campos - Define quais campos da entidade serão retornados na consulta.
- Regra - Adiciona uma regra para filtrar os itens buscados.
- Agrupar - Agrupa os itens de acordo com um campo específico ( Ex: Agrupar cidades por estado).
- Having - Cria uma regra de consulta para ser utilizada junto com o agrupar ( Ex: Agrupar cidades por estado e exibir somente as cidades com mais de 100 mil habitantes).
- Ordenar - Ordena os itens com base em no campo informado (Ex: Ordenar os itens com base no número do Id).
Passos
No nosso exemplo temos uma classe Cidade na qual será realizada uma consulta visual, para abrir o assistente de consultas clique no ícone de configuração do bloco Abrir consulta.
Observe a estrutura da consulta conforme a figuras 3 e 3.1:
Figura 3 - Entidade e campos selecionados na consulta
3.1 - Definição da ordenação dos itens consultados
Siga os passos abaixo para obter a consulta das figuras 3 e 3.1:
- Entidade: Na propriedade entidade, clique no "..." e selecione a entidade desejada na consulta, após isso clique em "Adicionar". Nesse caso a entidade utilizada foi a Cidade que está sendo representada como 'c'.
- Campos: Na propriedade campos, clique em "Novo Campo" e em seguida selecione o campo que deseja trazer na consulta , nesse exemplo utilizamos o campo estado (Para adicionar novos campos basta repetir o processo, ou se desejar trazer todos os campos selecione o objeto inteiro. No exemplo atual para trazer todos os campos seria necessário selecionar o campo 'c').
- Regra: Na propriedade regra, clique em "Nova Regra" e selecione um filtro para a consulta (Ex: Selecionar os campos em que o id seja maior que 1). No exemplo atual a quantidade de habitantes deve ser diferente do valor do parâmetro 'minimo'.
- Agrupar: Na propriedade agrupar, clique em "Novo Campo" e selecione o campo pelo qual os itens devem ser agrupados, nesse exemplo os itens são agrupados por estado.
- Having: Na propriedade having, clique em "Novo Campo" e informe uma nova regra para a consulta, porém a regra utilizada em having possui opções diferentes da propriedade regra (São utilizados as opções Sum, Avg, Min, Max, Count). Em nosso exemplo, a soma da quantidade de habitantes dos estados deve ser maior que o valor do parâmetro 'quantidadeHabitantes' ( Lembrando que a propriedade having funciona em conjunto com a propriedade agrupar, primeiro os itens são agrupados e o having é aplicado nos grupos).
- Ordenar: Na propriedade ordenar, clique em "Novo Campo" e selecione o campo pelo qual deseja ordenar e em qual ordem(Ascendente ou Descendente), nessa situação utilizamos o campo estado e a opção Asc (Ascendente).
- Selecione a opção "Ok" para salvar a consulta.
Exemplo da mesma consulta feita em SQL:
SELECT estado FROM cidade WHERE quantidadehabitantes > minimo GROUP BY estado HAVING Sum(quantidadehabitantes) > quantidadehabitantes ORDER BY estado ASC
Realizando consultas entre duas tabelas
É possível também realizar consultas entre mais de uma tabela. No exemplo abaixo, iremos retornar o nome dos países em que as cidades possuem mais de 50 mil habitantes e a soma dos habitantes de todas as cidades do país devem ser iguais ou superiores a 1 milhão.
Figura 4 - Consulta visual JPQL (Bloco de programação)
Siga os passos abaixo para obter a consulta da figura 4:
- Entidade: Na propriedade entidade, utilizamos a entidade Cidade que é representada como 'c'.
- Campos: Na propriedade campos, selecionamos a opção 'c.pais.nome' para podermos retornar o nome do país em que a cidade está relacionada.
- Regra: Nessa propriedade a regra definida foi que a quantidade de habitantes das cidades retornadas deve ser maior que 0.
- Agrupar: Os itens foram agrupados por país pelo campo 'c.pais.nome'.
- Having: Na propriedade having, a regra definida foi que o número de habitantes dos países(O atributo utilizado no exemplo foi o 'c.quantidadeHabitantes', mas como as cidades estão agrupadas por país considera-se que essa soma dos habitantes das cidades representa o total de habitantes do país) deve ser maior ou igual a 1 milhão.
Select p.Nome FROM Cidade as c, Pais as p WHERE p.id = c.fk_pais and c.quantidadeHabitantes > quantidade GROUP BY p.Nome HAVING SUM(c.quantidadeHabitantes) > quantidadeHabitantes
Fonte de dados VS Bloco de programação
Existem algumas diferenças entre o assistente de consulta JPQL da fonte de dados e o do bloco de programação.
Figura 5 - Consulta visual JPQL (Bloco de programação)
Figura 5.1 - Consulta visual JPQL (Fonte de dados)
O assistente visual do bloco de programação possui duas funcionalidades a mais que o assistente visual da fonte de dados. São elas, Aplicar Dados da Requisição e Habilitar Paginação.