Assistente de consulta
Para criar as consultas ao banco de dados, o Cronapp possui seu Assistente de consulta visual que simplifica esse processo.
Figura 1 - Assistente de Consulta
Acesso ao Assistente
Atualmente existem três formas de acesso ao Assistente de consulta visual:
Por meio de alguns blocos de programação do tipo servidor, que estão na categoria Banco de Dados.
Através do assistente de consulta de uma Fonte de Dados do tipo Entidade e SQL Nativo.
Utilizando o Testador de Consultas JPQL.
Vamos detalhar abaixo cada uma dessas formas de acesso.
Blocos de programação
Uma das formas de acesso ao Assistente de consulta visual é por meio de alguns blocos de programação da categoria Banco de Dados. Para abrir o Assistente, basta clicar no ícone de engrenagem de cada bloco (Figura 1.1). O bloco Abrir consulta (destaque 1 da Figura 1.1) exibe a mesma estrutura do Assistente visual detalhada no tópico Estrutura da Consulta (Figura 2). Já os blocos de manipulação de dados (DML - Data Manipulation Language) possuem algumas diferenças. Para mais detalhes, consulte a documentação específica de cada bloco abaixo.
Figura 1.1 - Blocos de acesso ao Assistente de consulta visual
Blocos do tipo servidor para acesso ao assistente visual:
Abrir consulta: cria uma consulta no banco de dados por meio do assistente visual.
Inserir: adiciona novos registros ao banco de dados por meio do assistente visual.
Atualizar: atualiza registros no banco de dados por meio do assistente visual.
Remover: remove registros do banco de dados por meio do assistente visual.
Fonte de Dados
O Assistente de consulta também pode ser acessado através de uma Fonte de Dados do tipo Entidade ou SQL Nativo. Na imagem abaixo, vemos como configurar uma Fonte de dados e acessar o Assistente de consulta por meio dela.
Figura 1.2 - Fonte de dados vinculada a uma entidade e sua consulta
Destaques da Figura 1.2:
Tipo da fonte: define o tipo da origem dos dados, podendo ser Entidade, SQL Nativo, Bloco de programação ou Web Services. Como informado anteriormente, apenas os tipos Entidade e SQL Nativo permitem o acesso ao Assistente de consulta, escolha uma dessas duas opções.
" ... " : seleciona a origem dos dados. Essa seleção irá variar a depender do tipo da fonte escolhida. Se for do tipo Entidade, será possível selecionar uma das classes de qualquer Diagrama de dados (namespace) do projeto. Por outro lado, se for do tipo SQL Nativo, poderá selecionar um dos namespaces do projeto.
Editar: abre o Assistente de consulta e permite personalizá-la. Esse botão estará desabilitado em Fontes de dados que não possuem o Assistente.
Consulta: exibe a consulta JPQL para a fonte do tipo Entidade, ou SQL para Fonte do tipo SQL Nativo.
A imagem a seguir apresenta o Assistente de consulta aberto após clicar no botão "Editar" (destaque 3 da Figura 1.2). Nele é possível personalizar a consulta realizada.
Figura 1.3 - Assistente de consulta da Fonte de dados
Testador de Consultas
Outra forma de acessar o Assistente de consulta é utilizando o Testador de Consultas JPQL, acessível a partir do menu do sistema em Ferramentas > Testador de Consultas JPQL (Figura 1.4).
Figura 1.4 - Testador de Consultas JPQL
Estrutura da Consulta
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; SQL (Structured Query Language), linguagem que trabalha com banco de dados relacionais e realiza as consultas sobre tabelas; e em requisições do tipo REST (Representational State Transfer), quando o assistente é utilizado em um bloco de programação ou no Testador de Consultas JPQL para gerar uma consulta a partir de uma Fonte de Dados, acesse o tópico REST para mais detalhes.
É importante destacar que o Assistente de consulta pode apresentar diferenças, dependendo da forma de acesso e o tipo de consulta realizada. As funcionalidades apresentadas neste tópico se referem ao Assistente acessado por meio do bloco de programação Abrir consulta, visto que possui mais campos para configurar.
Para obter dados que necessitam de consultas mais complexas, é possível desenvolver consultas de forma high-code, utilizando o JPQL com base no EclipseLInk do JPA.
Figura 2 - Assistente de consulta visual (Bloco de programação)
Entidade: adiciona as entidades, tabelas ou Fonte de dados que farão parte da consulta.
Campos: define quais campos serão buscados na consulta.
Join: combina colunas de uma ou mais entendidas ou tabelas, usando valores comuns a cada uma delas.
Regras: regra que será considerada ao buscar os registros.
Agrupar: agrupa linhas que possuem valores iguais nos mesmos campos.
Having: cria regras para serem usadas junto com os campos agrupados.
Ordenar: define a ordem em que os dados serão retornados.
SQL Nativo: permite o uso de consultas do tipo SQL nativo.
Modo de Consulta: altera a exibição dos dados em modo de teste da consulta, que pode ser por tabela 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 telas de forma automática.
Testar Consulta: exibe o resultado da consulta criada em uma nova janela, altere o campo Modo de Consulta para modificar a forma de exibição.
Editar como Texto: muda a janela para editar a consulta manualmente (high-code). Após alterar uma consulta manualmente, não será possível editar novamente em modo visual.
Visualizar como Texto: exibe a consulta gerada através da configuração visual.
OK e Cancelar: salva ou cancela a consulta.
Entidade
Adiciona as entidades, tabelas ou Fonte de dados que farão parte da consulta. Equivale a seleção de tabelas após a sentença "FROM" em uma consulta SQL. Dependendo do tipo de consulta selecionada no campo Entidade, alguns campos serão ou não exibidos. Veja o tópico Diferença entre consultas.
Figura 2.1 - Área de seleção das entidades
Campos e botões:
Entidade: exibe a entidade, tabela ou Fonte de dados recém selecionada.
" ... " : abre a janela para seleção.
Alias: permite adicionar um apelido.
+ Adicionar: confirma a selecionada na consulta.
Excluir: remove a entidade, tabela ou Fonte de dados selecionada.
Destaques da Figura 2.1:
Exibe a entidade, tabela ou Fonte de dados selecionada.
Exibe o alias configurado para a entidade, tabela ou Fonte de dados selecionada.
Para adicionar à consulta, clique no botão "..." do campo Entidade, selecione a classe, tabela ou a Fonte de dados desejada e finalize clicando em "+ Adicionar".
JPQL e SQL Nativo
Para realizar consultas do tipo SQL Nativo no Assistente de consulta dos bloco de programação, será necessário selecionar a checkbox SQL Nativo. Consulte o tópico correspondente nesta documentação para mais informações. A consulta definida na Figura 2.1, em JPQL e SQL Nativo, ficará da seguinte forma:
FROM Login lgFonte de dados
É importante destacar que as consultas do tipo Fonte de dados gera uma requisição REST. Consulte o tópico correspondente nesta documentação para mais informações. A consulta definida na Figura 2.1 ficará da seguinte forma:
GET app/loginCampos
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.2 - Á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:
+ Novo Campo: adiciona um campo das entidades selecionadas ou de entidades relacionadas.
+ Adicionar Todos: insere todos os campos das entidades selecionadas.
Excluir: exclui o campo.
Destaques da Figura 2.2:
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 selecionado.
MAX: retorna o maior valor do campo selecionado.
AVG: retorna a média aritmética dos valores do campo selecionado.
SUM: retorna a soma dos valores do campo selecionado.
COUNT: retorna a quantidade de registros do campo selecionado.
Campo selecionado: seleciona qual o campo será consultado.
Para mais detalhes sobre como utilizar o Tipo de retorno, acesse o tópico Aggregation functions (Funções de agregação) na documentação oficial.
JPQL
Em consultas JPQL, a área de seleção dos campos já mapeia todos os campos das entidades relacionadas (terceiro "obter" da imagem abaixo), por isso não é necessário usar o JOIN. 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 selecionar a opção "A.B.C.nome", criando um JOIN automaticamente.
Figura 2.2.1 - Área de seleção dos campos de uma consulta JPQL
Destaques da Figura 2.2.1:
Para retornar todos os campos de uma entidade, basta selecionar o alias da entidade desejada.
Para retornar um campo específico, é necessário selecionar o alias da entidade com o campo desejado.
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.
Por padrão, em consultas JQPL 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.EntidadeE.atributo.
A consulta definida na Figura 2.2.1 ficará da seguinte forma:
SELECT lg, lg.providerDisplayName, lg.user.name FROM Login lg, User usrSQL Nativo
Em consultas do tipo SQL Nativo, diferente de uma consulta JPQL, a área de seleção dos campos mapeia apenas em primeiro nível os campos das tabelas.
Figura 2.2.2 - Área de seleção dos campos de uma consulta SQL Nativo
A consulta definida na Figura 2.2.2 ficará da seguinte forma:
SELECT LG.ID, LG.PROVIDER_DISPLAY_NAME FROM LOGIN LG
Além disso, não é possível retornar todos os campos de uma tabela selecionando o alias, para lidar com vários níveis de relacionamento, será necessário utilizar o JOIN. Consulte o tópico correspondente para mais informações.
Fonte de dados
Em consultas do tipo Fonte de dados, a área de seleção dos campos mapeia apenas em primeiro nível os campos da Fonte de dados. Além disso, não é possível retornar todos os campos de uma tabela selecionando o alias.
Figura 2.2.3 - Área de seleção dos campos de uma consulta Fonte de dados
A consulta REST definida na Figura 2.2.3 ficará da seguinte forma:
GET app/login?$select=id%2CproviderDisplayNameJoin
Essa opção é exibida apenas em consultas do tipo JPQL e SQL Nativo. É uma operação de junção que combina colunas de uma ou mais tabelas, usando valores comuns a cada uma delas. Equivale a sentença "JOIN" em uma consulta SQL.
Como já informado, 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. No entanto, você pode utilizá-lo em consultas do tipo SQL Nativo, como no exemplo da imagem abaixo.
As cláusulas JOIN disponíveis são apenas as suportadas pelo EclipseLink, "JOIN" e "LEFT JOIN". Para mais detalhes, acesse os subtópicos do tópico FROM CLAUSE (Cláusula FROM) na documentação oficial.
Figura 2.3 - Área de seleção do Join
Campos e botões:
Join: exibe a entidade recém selecionada.
" ... " : abre a janela para seleção da entidade.
Alias: permite adicionar um apelido.
+ Adicionar: adiciona a entidade selecionada à consulta.
Excluir: exclui entidade adicionada.
Destaques da Figura 2.3:
Cláusula: tipo da cláusula JOIN utilizada. São elas:
JOIN: retorna apenas os registros que têm correspondências em ambas as entidades envolvidas na junção.
LEFT JOIN: retorna todos os registros da entidade à esquerda e os registros correspondentes da entidade à direita.
Entidade: exibe a entidade selecionada.
Alias: exibe o alias configurado para a entidade selecionada.
Campo da entidade: seleciona qual o campo da entidade será usado para consulta.
Condição: condição que será utilizada para comparar os valores das entidades. São elas:
Igual.
Diferente.
Menor.
Menor ou igual.
Maior.
Maior ou igual.
Parâmetro: campo que será usado como comparação.
A consulta definida na Figura 2.3, em JPQL e SQL Nativo, ficará da seguinte forma:
JOIN LOGIN LG ON LG.USER_ID = USR.ID;Regras
Essa opção é exibida apenas em consultas do tipo JPQL e SQL Nativo. 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 a sentença "WHERE" em uma consulta SQL. Caso tenha alguma dúvida sobre a regra WHERE, acesse o tópico WHERE Clause (Cláusula WHERE) na documentação oficial.
Figura 2.4 - Área de seleção das regras da consulta
Botões:
+ Nova Regra: adiciona uma regra vinculada ao campo selecionado.
+ Novo Grupo: insere um grupo com uma ou mais regras.
Excluir: exclui a regra ou grupo selecionado.
Destaques da Figura 2.4:
Negação: nega a sentença vinculada, adicionando um "not" antes.
Operador lógico: define se o operador lógico entre as sentenças será "e" ou "ou".
Inverter: alterna o operador lógico e os campos condicionais das sentenças vinculadas, por exemplo: se estiver selecionado "ou", será substituído por "e", isso também ocorrerá no campo condicional (campo 5 da Figura 2.4), que alternará de "igual" para "diferente".
Campo da entidade: campo da entidade que será utilizado na criação da regra.
Condição: define a condição que deve existir entre o campo e o parâmetro, são elas:
Igual.
Diferente.
Contido.
Não contido.
Iniciando com.
Não iniciando com.
Contém.
Não contém.
Terminando com.
Terminado sem.
É vazio.
Não é vazio.
É nulo.
Não é nulo.
Tipo de parâmetro: tipo do parâmetro que será utilizado na consulta, são eles:
Parâmetro: ao selecionar esse tipo, no campo "Parâmetro" é possível definir uma variável adicionando ":" (dois pontos) no início dela (destaque 7). Ao inserir um conteúdo sem os ":" (dois pontos) no início, este conteúdo ficará entre aspas ('') e será tratado como uma string.
Personalizado: ao selecionar esse tipo, no campo "Parâmetro" também é possível definir uma variável adicionando ":" (dois pontos) no início dela (destaque 7). No entanto, deve ser utilizado com o objetivo de passar um conteúdo estático personalizado, como uma string ou uma lista de elementos. Nesse caso, as aspas ('') não serão inseridas automaticamente, o próprio usuário deverá realizar esse tratamento (destaque 9).
Parâmetro: define o nome do parâmetro que será comparado com o campo da entidade. O conteúdo informado neste campo deve estar de acordo com o "Tipo de parâmetro" selecionado. Como informado anteriormente, neste campo é possível definir uma variável adicionando ":" (dois pontos) no início dela (destaque 7) ou um conteúdo estático personalizado (destaque 9).
↑ ↓ : clique e arraste o ícone ↑ ↓ para modificar a posição de uma regra ou grupo.
A regra definida na Figura 2.4, em JPQL ou SQL Nativo, ficará da seguinte forma:
WHERE usr.phoneNumber = :phoneNumber AND (NOT (usr.name = ('Maria') ) )Filtro
Essa opção é exibida apenas em consultas do tipo Fonte de dados. Este campo permite filtrar ou restringir os registros de uma consulta, semelhante ao campo Regras. No entanto, possui algumas limitações, já que sua consulta será convertida em uma requisição REST. A imagem abaixo detalha os recursos dessa funcionalidade.
Figura 2.5 - Área de seleção dos filtros da consulta
Botões:
+ Nova Regra: adiciona um filtro vinculado ao campo selecionado.
Excluir: exclui o filtro selecionado.
Destaques da Figura 2.5:
Campo da Fonte de dados: campo da Fonte de dados que será utilizado na criação do filtro.
Condição: define a condição que deve existir entre o campo e o parâmetro, são elas:
Igual.
Diferente.
Contido.
Não contido.
Iniciando com.
Não iniciando com.
Contém.
Não contém.
Terminando com.
Terminado sem.
É vazio.
Não é vazio.
É nulo.
Não é nulo.
Tipo de parâmetro: tipo do parâmetro que será utilizado na consulta, são eles:
Parâmetro: ao selecionar esse tipo, no campo "Parâmetro" é possível definir uma variável adicionando ":" (dois pontos) no início dela (destaque 4). Ao inserir um conteúdo sem os ":" (dois pontos) no início, este conteúdo ficará entre aspas ('') e será tratado como uma string.
Personalizado: ao selecionar esse tipo, no campo "Parâmetro" também é possível definir uma variável adicionando ":" (dois pontos) no início dela (destaque 7). No entanto, deve ser utilizado com o objetivo de passar um conteúdo estático personalizado, como uma string ou uma lista de elementos.
Parâmetro: define o nome do parâmetro que será comparado com o campo da entidade. Neste campo é possível definir uma variável adicionando ":" (dois pontos) no início dela (destaque 4) ou um conteúdo estático personalizado.
A regra definida na Figura 2.5 ficará da seguinte forma na requisição REST:
filter=%28name%20eq%20%3Aname%29Agrupar
Essa opção é exibida apenas em consultas do tipo JPQL e SQL Nativo. 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. Para mais detalhes sobre o agrupar, acesse o tópico GROUP BY Clause (Cláusula GROUP BY) na documentação oficial.
Figura 2.6 - Área de seleção do Agrupar
Botões:
+ Novo Campo: adiciona outro campo para agrupar.
Excluir: exclui o campo selecionado.
Destaques da Figura 2.6:
Campo a ser agrupado: seleciona qual o campo será agrupado.
A regra definida na Figura 2.6, em JPQL e SQL Nativo, ficará da seguinte forma:
GROUP BY user.emailConfirmedHaving
Essa opção é exibida apenas em consultas do tipo JPQL e SQL Nativo. A propriedade Having funciona de forma semelhante a propriedade Regras, 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. Para mais detalhes sobre a condição having, acesse o tópico HAVING Clause (Cláusula HAVING) na documentação oficial.
Figura 2.7 - Área de seleção das regras do Having
Botões: