Para criar as consultas ao banco de dados, o Cronapp utiliza o assistente de consulta visual, simplificando esse processo.
O Assistente de Consulta visual gera consultas em JPQL (Jakarta Persistence Query Language, conhecido antigamente como Java Persistence Query Language), uma linguagem de consulta ORM que atua sobre classes e objetos, diferentemente do SQL que realiza as consultas sobre tabelas. O Assistente é utilizado tanto em blocos de programação quanto em fontes de dados, mas existem pequenas diferenças entre o assistente de consulta do bloco e da fonte de dados.
O assistente permite criar consultas de forma visual (low-code) ou manual (high-code), usando JPQL.
Figura 1.1 - Assistente de consulta visual (Bloco de programação)
Figura 1.2 - Exibição de consulta em modo objetos
Figura 1.3 - Exibição de consulta em modo tabela
Agora vamos entender melhor as opções disponíveis na estrutura da consulta.
Figura 2.1 - Estrutura visual da consulta
Adiciona as entidades que farão parte da consulta. Equivale a seleção de tabelas após sentença "FROM
" em uma consulta SQL.
Em consultas JPQL não é necessário usar o "JOIN
", pois a área de seleção dos campos já mapeia todos os campos das entidades relacionadas. Por exemplo, imagine que uma entidade A
tem relação com B
, a entidade B
tem relação com C
e C
possui um campo chamado "nome
", dessa forma, basta selecionar a entidade A e na área Campos (tópico abaixo) selecionar a opção "A.B.C.nome
", criando um JOIN
automaticamente.
Figura 2.2 - Área de seleção das entidades
Botões:
Destaques da figura 2.2:
Para adicionar as entidades que farão parte da consulta, clique no botão "..." do campo Entidade, selecione a classe desejada e finalize clicando em "+ Adicionar".
Define quais campos serão buscados na consulta. Equivale a seleção dos campos das tabelas após a sentença "SELECT
" em uma consulta SQL.
Figura 2.3 - Área de seleção dos campos
É possível adicionar os campos desejados através do botão "+ Novo Campo" ou adicionar todos os campos da entidade de uma só vez, clicando em "+ Adicionar Todos".
Botões:
Destaques da figura 2.3:
Para retornar todos os campos de uma entidade, basta selecionar o alias da entidade desejada. Primeiro exemplo da figura 2.3: obter | lg
.
Para retornar um campo específico, é necessário selecionar o alias da entidade com o campo desejado. Segundo exemplo da figura 2.3: obter | lg.providerDisplayName
.
Caso queira obter um campo de uma entidade relacionada (JOIN
), selecione o alias da entidade, junto com o nome da entidade relacionada e o nome do campo. Terceiro exemplo da figura 2.3: obter | lg.user.name
.
Por padrão, a caixa de seleção dos campos só exibe relacionamentos até o terceiro nível. para relacionamentos maiores, informe manualmente. Exemplo: EntidadeA.EntidadeB.EntidadeC.EntidadeD.atributo
.
Nessa propriedade é definida as regras que serão consideradas ao buscar os dados no banco. Por meio do botão "+ Nova Regra" é possível adicionar regras e selecionar um condicional único entre as regras, ou adicionar vários grupos de regras e selecionar condicionais para cada grupo individualmente através do botão "+ Novo Grupo". As regras equivalem ao filtro após sentença "WHERE
" em uma consulta SQL.
Figura 2.4 - Área de seleção das regras da consulta
Botões:
Destaques da figura 2.4:
↑ ↓ : clique e arraste o ícone ↑ ↓ para modificar a posição de uma regra ou grupo.
A regra (where) definido na figura 2.4 ficará da seguinte forma:
WHERE usr.name = :name AND (NOT (lg.user.phoneNumber LIKE (CONCAT('%', '(71)', '%')) )) |
Possui a função de agrupar linhas que têm os mesmos valores em um ou mais campos específicos. Equivale a sentença "GROUP BY
" em uma consulta SQL.
Figura 2.5 - Área de seleção do Agrupar
Destaques da figura 2.5:
Botões:
A propriedade having funciona de forma semelhante a propriedade Regra, entretanto ela cria uma regra para os grupos criados com a propriedade agrupar. Por isso, o having sempre deve ser usado junto com o agrupar. Possui a mesma função do Having
em consultas SQL.
Figura 2.6 - Área de seleção das regras do Having
Botões:
Destaques da figura 2.6:
Nessa opção define a ordem de retorno dos itens. Por exemplo, é possível trazer a lista de funcionários ordenada pelos maiores salários. Possui a mesma função do Order by
em consultas SQL.
Figura 2.7 - Área de ordenação da consulta
Botões:
Destaques da figura 2.7:
Como informado anteriormente, o Assistente de consulta visual gera uma consulta em JPQL que se parece muito com consultas SQL. Veja abaixo uma imagem representando uma consulta usando o Assistente Visual (Figura 3.1), a consulta JPQL gerada pelo Assistente visual e o equivalente em MySQL.
O JPA/JPQL não possui suporte para UNION
, INTERSECT
e EXCEPT
, dessa forma, para consultas mais complexas que necessitam dessas funcionalidades, use o modo high code (SQL puro).
Figura 3.1 - Exemplo de consulta visual
A consulta gerada pela configuração do assistente visual da Figura 3.1:
SELECT c.estado.nome FROM Cidade c WHERE c.quantidadeHabitantes <> :minimo GROUP BY c.nome HAVING SUM(c.quantidadeHabitantes) > :quantidadeHabitantes ORDER BY c.estado ASC |
Exemplo da mesma consulta feita para o MySQL:
SELECT c.nome FROM db_componentesvisuais2.CIDADE c JOIN db_componentesvisuais2.ESTADO e on c.fk_estado = e.id WHERE c.quantidadehabitantes <> '%minimo%' GROUP BY c.nome HAVING SUM(c.quantidadehabitantes) > '%quantidadeHabitantes%' ORDER BY e.id ASC |
Existem duas formas de alimentar uma Fonte de dados e em ambas é possível utilizar o Assistente de Consulta JPQL:
Figura 4.1 - Fonte de dados vinculada a uma entidade e sua consulta
Figura 4.2 - Fonte de dados alimentada por bloco de programação com a opção Habilitar paginação ativa
Alimentar uma fonte de dados por bloco de programação permite que seja feito algum tratamento no conteúdo obtido antes de alimentar a fonte de dados. O Assistente de consulta visual do Bloco de programação possui duas funcionalidades a mais: Aplicar Dados da Requisição e Habilitar Paginação. (Figuras 4.3 e 4.4).
Figura 4.3 - Assistente de Consulta Visual aberto via Bloco de programação
Figura 4.4 - Assistente de Consulta Visual aberto via Fonte de dados
Nas versões anteriores do Cronapp 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 (Figura 4.3). Essa nova opção 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, fazendo com que a fonte de dados funcione integralmente com a consulta do Bloco de Programação.
Caso queira paginar os dados exibidos na tela, utilize o bloco Abrir consulta e selecione a opção Habilitar paginação, ao fazer isso, o bloco exibirá os parâmetros limit e offset (Figura 4.2).
Exemplo: Em uma consulta com 100 registros, ao definir os parâmetros limit com '20' e o offset com '10', o resultado retornará do registro 10 até o 30.
O bloco de banco de dados Abrir consulta exibe a mesma estrutura do Assistente visual como vimos acima. Já os blocos de manipulação de dados (DML - Data Manipulation Language) possuem algumas diferenças.
Figura 5.1 - Blocos que utilizam o Assistente de consulta visual
Blocos do tipo servidor de acesso ao banco de dados:
Utilize esse bloco para criar objetos de uma entidade e facilitar a manipulação de dados junto aos outros blocos de banco de dados. Selecione o ícone engrenagem para abrir a janela de configuração, escolha a entidade desejada no botão "..." (campo Entidade) e, por fim, marque os atributos (área Campos) que serão alimentados.
Acesse a documentação do bloco Criar entidade para mais detalhes.
Figura 5.2 - Criando um objeto a partir do bloco Criar nova Entidade
Todos os demais blocos apresentados aqui podem ser alimentados a partir do objeto gerado pelo bloco Criar nova Entidade (Figura 5.2) ou diretamente pela seleção de campos (Figura 5.3).
Utilize o bloco Inserir para adicionar registros a partir de um objeto ou seus campos.
Acesse a documentação do bloco Inserir para mais detalhes.
Figura 5.3 - Configuração do bloco Inserir
Utilize o bloco Atualizar para modificar registros em uma tabela a partir de um objeto ou seus campos.
Acesse a documentação do bloco Atualizar para mais detalhes.
Figura 5.4 - Configuração do bloco Atualizar
Acesse a figura 1.1 para obter informações sobre o campo Modo de consulta e os botões Testar Consulta, Editar Texto e Visualizar como Texto.
O bloco Remover exclui um ou mais registros com base em filtros ou objeto.
Acesse a documentação do bloco Remover para mais detalhes.
Figura 5.5 - Configuração do bloco Remover
Acesse a figura 1.1 para obter informações sobre o campo Modo de consulta e os botões Testar Consulta, Editar Texto e Visualizar como Texto.
Nesta página