Você está vendo a versão antiga da página. Ver a versão atual.

Comparar com o atual Ver Histórico da Página

« Anterior Versão 39 Próxima »

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 é utilizado em blocos de programação e fontes de dados(Vale ressaltar que existem diferenças entre o assistente de consulta do bloco e fonte de dados), e que tem como objetivo facilitar a criação de consultas ao banco de dados, para esse fim o assistente dispõe de uma estrutura que permite a realização de consultas sem a necessidade de escrever o código e sim selecionando as entidades, campos, regras e outros por meio de cliques, 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)


  1. 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.
  2. Testar Consulta - Realiza o teste da consulta criada e retorna os dados correspondentes a ela em uma nova janela (A forma de exibição é influenciada pelo modo de consulta escolhido).
  3. Editar como Texto - Faz a edição da consulta visual em formato de texto (Após alterar uma consulta visual já criada nesse formato, não é possível alterar a consulta novamente em formato visual).
  4. Visualizar como Texto - Exibe a consulta feita em formato visual em forma de texto.
  5. Modo de Consulta - Altera a exibição da consulta, que pode ser por tabelas ou objetos (Figuras 1.1 e 1.2). 
  6. Aplicar dados da requisição - Aplica as requisições (paginação, ordenação e outros) diretamente na consulta (Disponível apenas em consultas via bloco de programação).
  7. Habilitar Paginação - Realiza a paginação dos dados em uma página de forma automática (Disponível apenas em consultas via bloco de programação).   
  8. OK e Cancelar Salva ou cancela a consulta.

   Figura 1.1 - Exibição de consulta em modo objetos


Figura 1.2 - Exibição de consulta em modo tabela

Estrutura da consulta

Agora vamos entender melhor as opções disponíveis na estrutura da consulta. 

Figura 2 - Estrutura visual da consulta

1. Entidade:

Permite selecionar as entidades que serão utilizadas na consulta. Na opção entidade selecionamos os "..." e escolhemos a classe que será consultada, já em alias definimos como essa entidade será representada durante as consultas, por exemplo, se desejarmos criar uma consulta para a entidade 'Pessoas' o alias dela seria 'p' (pode ser um nome qualquer), logo tudo que for citar essa classe no futuro irá utilizar 'p' para se referir a 'Pessoas'. Após selecionar a entidade e sua representação deve-se clicar em 'Adicionar' para acrescentar a classe na consulta e se desejar adicionar uma outra entidade na consulta basta repetir o processo.

2. Campos:

É onde são escolhidos os campos que serão retornados na consulta. Se desejar buscar todos os campos da entidade, basta clicar no botão 'Adicionar Todos' que todos os campos serão adicionados a consulta, mas se não desejar adicionar todos os campos é necessário clicar em 'Novo Campo' e selecionar o campo desejado na consulta. Vamos voltar para o nosso exemplo, ao selecionarmos 'p.nome' estamos dizendo que queremos retornar o nome da nossa entidade 'Pessoa'. Outra opção que pode ser definida é a obter, que define o que queremos do campo selecionado, nessa propriedade podemos utilizar Obter (Retorna o valor do campo), MIN (Retorna o menor valor do campo), MAX (Retorna o maior valor do campo), AVG ( Retorna a média aritmética do campo), SUM ( Retorna a soma dos valores do campo), COUNT ( Retorna a quantidade de registros do campo). Vamos exemplificar, suponhamos que em nosso banco de dados possuem 6 pessoas cadastradas, se eu consultar Obter 'p.idade', MIN 'p.idade', MAX 'p.idade', AVG 'p.idade', SUM 'p.idade' e COUNT p.idade iremos receber, respectivamente, a idade de todas as pessoas, a menor idade registrada, a maior idade registrada, a média das idades de todas as pessoas, a soma das idades de todas as pessoas e a quantidade de pessoas cadastradas.

3. Regra:

Aqui é definida a regra da consulta. Para adicionar uma nova regra deve-se clicar em'Nova Regra'e selecionar o campo desejado para o filtro, após isso é necessário selecionar como o campo deverá ser filtrado. As opções para strings são: igual, diferente, contido e não contido, já para números as opções são: menor, menor ou igual, maior, maior ou igual, entre, não entre e no geral as opções são: nulo e não nulo, na próxima etapa é necessário adicionar um nome ao parâmetro de filtro, que pode ter qualquer nome. No nosso exemplo vamos retornar apenas os maiores de 18 anos, logo nossa consulta seria 'p.idade' maior idademinina ( idademinima representa o nome do parâmetro, esse parâmetro é solicitado posteriormente e pode ser atribuído ao valor desejado, nesse caso será 18). É possível também adicionar um grupo de regras, para isso clique em'Novo grupo'e então será possível criar conjuntos de regras isoladas, opção que é útil ao se consultar mais de uma entidade.

4. Agrupar:

Nessa propriedade é possível agrupar os itens por meio de um campo comum. Para utilizar o campo deve-se clicar em 'Novo Campo' e selecionar o campo pelo qual os itens serão agrupados. Em nosso exemplo, as pessoas serão agrupadas por categoria de idade( adultos, idosos, crianças), logo o campo selecionado será 'p.categoriaidade'.

5. Having:

A propriedade having é semelhante a propriedade regra e deve ser utilizada juntamente com a propriedade agrupar, para adicionar deve-se clicar em 'Novo Campo' e selecionar a 'regra' a ser utilizada. As opções são:  MIN, MAX, AVG, SUM(a definição de cada opção foi informada no item 2), em nosso exemplo iremos retornar as categorias de idade que possui a média de idade maior que 20, logo nossa consulta será AVG 'p.idade' maior parametroDeMédiaDeIdade. Na consulta anterior serão retornados apenas os grupos que se enquadrarem no filtro.

5. Ordenar:

É definida a ordem de exibição do retorno da consulta que é baseada em um campo, para adicionar basta clicar em 'Novo Campo' e selecionar o campo pelo qual os itens serão ordenados e no campo seguinte definimos se essa ordem será Asc (Crescente) ou Desc (Decrescente) . No nosso ultimo exemplo as pessoas serão exibidas por ordem de idade, logo nossa consulta seria Obter (essa opção foi dissertada na propriedade campos) 'p.idade' Asc, ou seja, os itens relacionados serão exibidos do mais novo para o mais velho.

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


Figura 3.1 - Definição da ordenação dos itens consultados

Siga os passos abaixo para obter a consulta das figuras 3 e 3.1: 

  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'.
  2. 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').
  3. 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'.
  4. 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.
  5. 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).
  6. 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).
  7. Selecione a opção "OK" para salvar a consulta.


Exemplo da mesma consulta feita em SQL:

Consulta figuras 3 e 3.1
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 duas tabelas. 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:

  1. Entidade:  Na propriedade entidade, utilizamos a entidade Cidade que é representada como 'c'.
  2. 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.
  3. Regra: Nessa propriedade a regra definida foi que a quantidade de habitantes das cidades retornadas deve ser maior que 0.
  4. Agrupar: Os itens foram agrupados por país, por meio do campo 'c.pais.nome'.
  5. 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.

Exemplo da mesma consulta feita em SQL:

Consulta figura 4
SELECT c.fk_pais, p.nome 
FROM Cidade as c 
INNER JOIN Pais as p 
ON p.id = c.fk_pais 
WHERE c.quantidadeHabitantes > quantidade 
GROUP BY p.nome 
HAVING SUM(c.quantidadeHabitantes) > quantidadeHabitantes


Ausência de suporte a expressões SQL

 O JPA/JPQL não possui suporte para UNION, INTERSECT e EXCEPT.

Limitações da consulta

Não é possível realizar consultas entre 3 tabelas ou mais de forma low code. Esse tipo de consulta deve ser feita em modo high code (código).

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.

É possível aplicar todos os parâmetros de uma requisição a uma fonte de dados em uma consulta usada com a função Abrir Consulta.

O Cronapp permite uso de um bloco como fonte de dados. Quando usamos isso, na maioria das vezes, o intuito é usar uma consulta com a função Abrir Consulta. Nas versões anteriores existia uma opção chamada Paginação Automática. Essa opção aplicava os dados de paginação da requisição da fonte de dados à consulta. O Cronapp evoluiu essa opção que passou a se chamar Aplicar Dados da Requisição. Essa opção agora aplica paginação, ordenação, filtros e qualquer outro dado da requisição ODATA à consulta. Com isso, todas as operações de interface serão enviadas à consulta e buscas, ordenações etc passam a funcionar com Fonte de Dados com Bloco de Programação.



Figura 5.2 - Opção de habilitar paginação 

Blocos que utilizam o assistente visual JPQL

1. Bloco Inserir:

Bloco do tipo servidor que adiciona uma nova entidade ao banco de dados por meio do assistente visual do JPQL ( consulte mais detalhes aqui).

2. Bloco Abrir consulta:

Bloco do tipo servidor que realiza uma consulta no banco de dados por meio do assistente visual do JPQL (consulte mais detalhes aqui).

3. Bloco Abrir consulta:

Bloco do tipo servidor que atualiza uma entidade no banco de dados por meio do assistente visual JPQL (consulte mais detalhes aqui).

4. Bloco Abrir consulta:

Bloco do tipo servidor que remove uma entidade do banco de dados por meio do assistente visual JPQL (consulte mais detalhes aqui).



  • Sem rótulos