Versões comparadas
Chave
- Esta linha foi adicionada.
- Esta linha foi removida.
- A formatação mudou.
Para criar as consultas ao banco de dados, o Cronapp utiliza um assistente de consulta visual, que facilita a criação de consultas ao banco de dados.
Visão Geral
Âncora | ||||
---|---|---|---|---|
|
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 Cronapp possui um assistente de consulta visual para facilitar a criação de consultas JPQL. O assistente de consulta é 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 ou manual, além disso, possui outras funcionalidades que auxiliam na obtenção de dados do banco.
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 (A forma de exibição é influenciada pelo modo de consulta escolhido).
- 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).
- Visualizar como Texto - Exibe a consulta feita no formato visual em forma de texto.
- Modo de Consulta - Altera a exibição da consulta, que pode ser por tabelas ou objetos (Figuras 1.1 e 1.2).
- 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).
- 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).
- 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 adicionar uma nova entidade a consulta. Para isso deve-se clicar nos "..." e selecionar a classe desejada.
- Alias: É o apelido dado a entidade, por exemplo, se nossa classe fosse Pessoas o nosso alias poderia ser p (Pode ser o nome desejado). Nas próximas opções a entidade será referenciada pelo alias.
Para confirmar a adição da entidade, basta clicar em adicionar. E para adicionar uma nova entidade deve-se repetir o processo acima.
Figura x - Estrutura visual da consulta (campos)
2. Campos: Define quais campos serão buscados na consulta. É 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".
- Tipo de retorno: Define como o valor do campo será retornado. Os tipos são:
- Obter: Retorna o valor do campo como está no banco;
- MIN: Retorna o menor valor do campo;
- MAX: Retorna o maior valor do campo;
- AVG: Retorna a média aritmética dos valores do campo registrados no banco;
- SUM: Retorna a soma dos valores do campo;
- COUNT: Retorna a quantidade de registros do campo.
- Campo selecionado: Seleciona qual o campo será consultado.
Para adicionar novos campos na consulta o processo acima deve ser repetido.
Figura x - Estrutura visual da consulta (Regra)
3. Regra: Nessa propriedade é definida a regra que será considerada ao buscar os dados no banco. É possível ir adicionando regras, por meio do botão "Nova Regra" (Figura x - elemento 1) ou adicionar um grupo de regras, através do botão "Novo Grupo" (Figura x - elemento 2).
- Campo da entidade: Aqui é decidido qual o campo da entidade que será utilizado para a criação da regra.
- Condição: Escolhe-se qual é a condição que deve existir entre o campo e o parâmetro.
- Parâmetro: Define-se o nome do parâmetro que será comparado com o campo da entidade.
- Não: Adiciona uma negação (not) a condição criada.
- Inverter: Inverte a condição definida na regra.
É possível também adicionar um grupo de regras. O funcionamento é semelhante ao citado anteriormente, entretanto para criar um grupo de regras primeiramente deve-se clicar em "Novo Grupo".
Figura x - Estrutura visual da consulta (Agrupar)
4. Agrupar: Aqui é possível agrupar os dados retornados na consulta. Para isso deve-se clicar no botão "Novo Campo".
Campo de referência: Seleciona qual o campo que será a referência para criar os grupos.
Figura x - Estrutura visual da consulta (Having)
5. Having: 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. Para adicionar um novo clique em "Novo campo"
- Tipo de dados da condição: É definido qual o tipo será retornado do banco para ser comparado na regra criada pelo having;
- Campo: Campo que será a base da operação realizada para obter os dados de comparação;
- Condição: Condição que será utilizada para comparar o parâmetro e o valor obtido no campo de tipo de dados da condição;
- Parâmetro: Valor que será comparado com o tipo de dado retornado;
Figura x - Estrutura visual da consulta (Ordenar)
6. Ordenar: Nessa opção é definida a ordem de retorno dos itens. Por exemplo, é possível trazer os dados organizados do menor id para o maior ou o contrário.
- Tipo de dado: Define qual o tipo de dado que será utilizado para ordenar os dados.
- Campo: Campo que será utilizado como referência na ordenação.
- Tipo de ordenação: Define o tipo de ordenação que será considerada na propriedade. O tipo pode ser Asc ( ascendente, que é do valor mais baixo para o mais alto) e Desc (descendente, do valor mais alto para o mais baixo).
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:
- 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:
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
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:
- 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, por meio do 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.
Exemplo da mesma consulta feita em SQL:
Bloco de código | ||||
---|---|---|---|---|
| ||||
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 |
Aviso | ||
---|---|---|
| ||
O JPA/JPQL não possui suporte para UNION, INTERSECT e EXCEPT. |
Aviso | ||
---|---|---|
| ||
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 Âncora Diferença Diferença
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).
Nessa página
Índice