- Created by Igor Andrade, last modified on 01/03/2021
O Cronapp utiliza um assistente de consulta visual que facilita a criação de consultas ao banco de dados.
Visão Geral
Ao utilizarmos o Assistente de Consulta Visual, geramos consultas em JPQL (Java Persistence Query Language). Diferente do SQL que opera sobre tabelas, as consultas em JPQL operam sobre classes e objetos. Além de possui sintaxe bem semelhante ao SQL, consultas em JPQL podem ser executadas em praticamente todos os bancos de dados, sem a necessidade de adaptação.
O Assistente de consulta além de gerar uma consulta JPQL, possui outras funcionalidade, como vista na Figura abaixo:
Figura 1.1 - Assistente de consulta visual
- Estrutura da consulta: possui as opções para a criação da consulta, como selecionar as entidades, campos, criar regras e outros.
- Modo de consulta: ao testar a consulta, altera a exibição dos dados em modo tabela ou objeto.
- 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.
- 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 o código gerado pela consulta visual.
- OK e Cancelar: salva ou cancela a consulta.
Curiosidade
Você pode querer usar algum recurso ou funções próprias do seu banco de dados (MySQL, PostgreSQL, SQLSERVER e outros) e o JPQL permite isso. Basta utilizar a função SQL(' ') na consulta JPQL ao editar como texto.
Por exemplo, a consulta abaixo retorna o horário atual do banco de dados em um banco MySQL.
select SQL('NOW()') from User u
Passos
De volta a função (IdDoUsuarioLogado) que criamos no passo anterior, clique no ícone de configurações do bloco Abrir consulta para abrir a janela de assistente de consulta (Figura 2.1).
Figura 2.1 - Consulta para obter o Id do usuário através do seu login.
Siga os passos abaixo para obter a consulta da Figura 2.1.
- Clique no botão "…" do campo Entidade e selecione a entidade app.entity.user (User).
- Clique no botão lateral + Adicionar.
- Clique em + Novo Campo,
- Deixe selecionado opção padrão Obter e selecione a opção u.id no campo seguinte.
- Clique em + Nova Regra para definirmos o filtro.
- Selecione no primeiro campo a opção u.normalizedUserName.
Após isso, clique no botão "Visualizar como texto" e para ver uma consulta igual a informada abaixo:
select u.id from User u where u.normalizedUserName = :normalizedUserName
Ou seja, a consulta irá retornar o ID do usuário que possui o mesmo nome de usuário normalizado que iremos passar. Clique em Voltar, para sair do modo de visualizar como texto e retornar para a janela de edição visual, finalize clicando em OK (7) para salvar.
Normalizar nome do usuário
A classe User possui dois atributos para o nome do Usuário, o normalizedUserName e o UserName. Dessa forma, as aplicações criadas no Cronapp permitem que o usuário possa criar seu nome de usuário com caracteres especiais, por exemplo "João", que será salvo no campo UserName. Porém, para garantir a segurança, esse nome será automaticamente normalizado, retirando os caracteres especiais e salvando no campo normalizedUserName como "joao".
Quando o usuário for se autenticar na aplicação, tanto faz ele informar "João" ou "joao" no campo Usuário, o sistema irá normalizar o usuário informado e converter para "joao", só depois irá comparar com campo normalizedUserName e sua senha, permitindo o seu acesso se os dois campos estiverem corretos.
Acoplando os blocos
Após a configuração da consulta visual, o bloco Abrir consulta vai exibir como parâmetro uma abertura lateral normalizedUserName. Acople o bloco Normalizar junto com a chamada da função que criamos inicialmente, LoginDoUsuario, como na Figura 2.2.
Figura 2.2 - Finalizando a função de bloco IdDoUsuarioLogado
Finalizada a configuração das funções do sistema, vamos trabalhar com as páginas web e mobile nas próximas etapas.
- No labels