UFG - Instituto de Informática



Documentos relacionados
Aula 2 - Revisão de JPA (Java Persistence API)

UFG - Instituto de Informática

Orientação a Objetos

Java Persistence API. Entity Entity Campos e Propriedades Entity Chaves Primárias Entity Associações

Orientação a Objetos

Java Persistence Query Language JPQL

Álgebra Relacional. Conjunto de operações que usa uma ou duas relações como entrada e gera uma relação de saída. Operações básicas:

Coleções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade

UFG - Instituto de Informática

Implementando uma Classe e Criando Objetos a partir dela

Introdução a Java. Hélder Nunes

Android e Bancos de Dados

Aula 5. Carlos Eduardo de Carvalho Dantas

SQL Linguagem de Manipulação de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

UFG - Instituto de Informática

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Programação Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

JSP - ORIENTADO A OBJETOS

Manipulação de Dados em PHP (Visualizar, Inserir, Atualizar e Excluir) Parte 2

SQL BANCO DE DADOS. Linguagem de consulta SQL. Linguagem de consulta SQL. Linguagem de Consulta Estruturada

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS

Consultas SQL Parte II

Definida pelo American National Standard Institute (ANSI) em 1986

Comandos de Manipulação

Tarefa Orientada 13 Agrupamento e sumário de dados

NOME SEXO CPF NASCIMENTO SALARIO

Banco de Dados. Prof. Antonio

Sistemas Operacionais

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

AULA 7 FUNÇÕES AGREGADAS. Funções Agregadas

Programação para Android. Aula 07: Persistência de dados Shared Preferences, Internal e External Storage

SQL Comandos para Relatórios e Formulários. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 1. Cursos de Computação

DML - SELECT Agrupando Dados

António Rocha Nuno Melo e Castro

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Treinamento sobre SQL

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

ESTRUTURA BÁSICA DE UM PROGRAMA JAVA

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária

Informática I. Aula 6. Aula 6-12/09/2007 1

BDII SQL Junção Revisão 8

Oficina. Praça das Três Caixas d Água Porto Velho - RO

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Tarefa Orientada 14 Subconsultas

Orientação a Objetos

DAS5102 Fundamentos da Estrutura da Informação

Introdução à Linguagem Java

Programação de Computadores I. Linguagem C Vetores

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

COMPETÊNCIAS ESPECÍFICAS Compreender e utilizar a linguagem SQL, na construção e manutenção de uma base de dados.

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

Introdução à Programação

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

Portfólio do Aluno 2012 / º Ano Linguagem de Programação Módulo n.º Fábio Oliveira

Persistência de Dados em Java com JPA e Toplink

Java 2 Standard Edition Como criar classes e objetos

SQL UMA ABORDAGEM INTERESSANTE

8VDQGR5HSRUW0DQDJHUFRP&ODULRQH3RVWJUH64/ -XOLR&HVDU3HGURVR 8VDQGRSDUkPHWURV

Professor: Douglas Sousa Cursos de Computação

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C

Structured Query Language (SQL)

Ameaças, riscos e vulnerabilidades Cont. Objetivos

Como funcionam os comandos de SQL no Logic Basic Por Alan Oliveira

Persistência e Banco de Dados em Jogos Digitais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Aula 2. Objetivos Conceitos; Instalação do Text Pad; Entendendo o código java do AloMundo1 Codificação do AloMundo2,AloMundo3 e AloMundo4.

5 Mecanismo de seleção de componentes

PROGRAMANDO EM C# ORIENTADO A OBJETOS

Prof. Ronaldo R. Goldschmidt. geocities.yahoo.com.br/ronaldo_goldschmidt

Roteiro do Programa e Entrada/Saída

Programação Orientada a Objetos Herança Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

HIBERNATE EM APLICAÇÃO JAVA WEB

Linguagem de Programação III

SQL DML. Frederico D. Bortoloti

NetBeans. Conhecendo um pouco da IDE

Figura 1. A Classe Java

Sistemas Operacionais 3º bimestre. Dierone C.Foltran Jr.

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve

Introdução ao PHP. Prof. Késsia Marchi

LÓGICA DE PROGRAMAÇÃO. Professor Celso Masotti

Aspectos de Segurança em Programação com Java

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br

Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados. Prof. Josenildo Silva jcsilva@ifma.edu.br

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

Universidade da Beira Interior. Sistemas Distribuídos

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

Padrão J2EE Data Access Object (DAO)

Python Intermediário. terça-feira, 4 de agosto de 15

INTRODUÇÃO 12. DOCUMENTAÇÃO INTRODUÇÃO INTRODUÇÃO

Algoritmos e Programação II. Sobrecarga

Disciplina: Unidade V: Prof.: Período:

FBV - Linguagem de Programação II. Um pouco sobre Java

Transcrição:

UFG - Instituto de Informática Curso: Engenharia de Software Arquitetura de Software Prof.: Fabrízzio A A M N Soares professor.fabrizzio@gmail.com Aula 12 Consultas JPQL

Consultas JPQL Consultas em JPQL podem ser definidas em qualquer classe Java, dentro de um método por exemplo. Para criar uma consulta, devemos utilizar o método createquery() passando uma string com o código JPQL. Consultas criadas dessa maneira são chamadas de consultas dinâmicas. 1 public void ummetodoqualquer () { 2 String jpql = " SELECT p FROM Pessoa p"; 3 Query query = manager. createquery ( jpql ); 4 }

Named Queries As Named Queries são definidas através de anotações nas classes que implementam as entidades. Podemos aplicar a anotação @NamedQuery quando queremos definir apenas uma consulta ou a anotação @NamedQueries quando queremos definir várias consultas. 1 @NamedQuery ( name =" Pessoa. findall ", query =" SELECT p FROM Pessoa p") 2 class Pessoa { 3... 4 }

Named Queries 1 @NamedQueries ({ 2 @NamedQuery ( name =" Pessoa. findall ", query =" SELECT p FROM Pessoa p"), 3 @NamedQuery ( name =" Pessoa. count ", query =" SELECT COUNT (p) FROM Pessoa p") 4 }) 5 class Pessoa { 6... 7 }

Named Queries Para executar uma Named Query, devemos utilizar o método createnamedquery(). Apesar do nome, esse método não cria uma Named Query, pois as Named Queries são criadas na inicialização da unidade de persistência. Esse método apenas recupera uma Named Query existente para ser utilizada. 1 public void listapessoas () { 2 Query query = manager. createnamedquery (" Pessoa. findall "); 3 List < Pessoa > pessoas = query. getresultlist (); 4 }

Parâmetros Para tornar as consultas em JPQL mais genéricas e evitar problemas com SQL Injection, devemos parametrizá-las. Adicionar um parâmetro em uma consulta é simples. Para isso, basta utilizar caractere : seguido do nome do argumento. 1 @NamedQuery ( name =" Pessoa. findbyidade ", 2 query =" SELECT p FROM Pessoa p WHERE p. idade > : idade ") 1 public void listapessoas () { 2 Query query = manager. createnamedquery (" Pessoa. findbyidade "); 3 query. setparameter (" idade ", 18) ; 4 List < Pessoa > pessoascommaisde18 = query. getresultlist (); 5 }

Parâmetros É possível também adicionar parâmetros em uma consulta de maneira ordinal com o uso do caractere? seguido de um número. 1 @NamedQuery ( name =" Pessoa. findbyidade ", 2 query =" SELECT p FROM Pessoa p WHERE p. idade >?1") 1 public void listapessoas () { 2 Query query = manager.createnamedquery ("Pessoa.findByIdade"); 3 query.setparameter(1,18) ; 4 List<Pessoa>pessoasComMaisDe18 = query.getresultlist(); 5 }

Tipos de Resultados - Lista de Entidades Lista de Entidades Uma consulta em JPQL pode devolver uma lista com os objetos de uma entidade que são compatíveis com os filtros da pesquisa. Por exemplo, considere a seguinte consulta: String query = "SELECT p FROM Pessoa p";

Tipos de Resultados - Lista de Entidades O resultado dessa pesquisa é uma lista com todas as instâncias da entidade Pessoa que foram persistidas. Esse resultado pode ser obtido através do método getresultlist(). String query = " SELECT p FROM Pessoa p"; Query query = manager. createquery ( query ); List < Pessoa > pessoas = query. GetResultList (); Nesse caso, os objetos da listagem devolvida pela consulta estão no estado managed, ou seja, alterações realizadas no conteúdo desses objetos são sincronizadas com o banco de dados de acordo com as regras de sincronização.

Tipos de Resultados Typed Queries O compilador da linguagem Java não verifica a compatibilidade entre a variável e o resultado da consulta. Na consulta abaixo, o compilador não sabe se o método getresultlist() devolverá de fato uma lista de pessoas, pois ele não processa a string que define a consulta. 1 String query = " SELECT p FROM Pessoa p"; 2 Query query = manager. createquery ( query ); 3 List < Pessoa > pessoas = query. getresultlist ();

Tipos de Resultados Typed Queries Sem a ajuda do compilador, há mais chances de ocorrerem erros de execução. Por exemplo, a consulta abaixo provocaria uma exceção. 1 String query = " SELECT p FROM Pessoa p"; 2 Query query = manager. createquery ( query ); 3 List < Departamento > departamentos = query.getresultlist ();

Tipos de Resultados Typed Queries Para diminuir a chance de erro, podemos utilizar as Typed Queries. Nesse tipo de consulta, o compilador também não verifica o código JPQL. No entanto, devemos especificar o tipo de resultado esperado para que o compilador verifique o restante do código e garanta que a utilização do resultado da consulta seja compatível com o tipo especificado. 1 String query = " SELECT p FROM Pessoa p"; 2 TypedQuery < Pessoa > query = manager. createquery (query, Pessoa. class ); 3 List < Pessoa > pessoas = query. getresultlist ();

Tipos de Resultados - Lista de Objetos Comuns A consulta abaixo devolve uma lista de pessoas. 1 String query = " SELECT p FROM Pessoa p"; 2 TypedQuery < Pessoa > query = manager. createquery (query, Pessoa. class ); 3 List < Pessoa > pessoas = query. getresultlist ();

Tipos de Resultados - Lista de Objetos Comuns Dessa forma, teríamos acesso a todos os dados das pessoas dessa listagem. Contudo, muitas vezes, não desejamos todas as informações. Por exemplo, se a nossa aplicação precisa apresentar uma lista dos nomes das pessoas cadastradas, não é necessário recuperar nada além dos nomes.

Tipos de Resultados - Lista de Objetos Comuns Quando definimos as consultas, podemos determinar o que el as devem trazer de fato do banco de dados. Por exemplo, a consulta abaixo recupera apenas os nomes das pessoas. 1 String query = " SELECT p. nome FROM Pessoa p"; 2 TypedQuery < String > query = manager. createquery (query, String. class ); 3 List < String > nomes = query. getresultlist ();

Tipos de Resultados Valores Únicos Suponha que desejamos saber quantas pessoas possuem mais do que 18 anos. Nesse caso, não é necessário trazer mais do que um número do banco de dados. Em outras palavras, o resultado dessa consulta não deve ser uma lista, mas sim um valor numérico. Para isso, podemos aplicar as funções de agregação:

Tipos de Resultados Valores Únicos AVG Calcula a média de um conjunto de números COUNT Contabiliza o número de resultados MAX Recupera o maior elemento um conjunto de números MIN Recupera o menor elemento um conjunto de números SUM Calcula a soma de um conjunto de números

Tipos de Resultados Valores Únicos A consulta abaixo devolve a quantidade de pessoas persistidas. Observe que isso é feito utilizando se o método getsingleresult() ao invés do getresultlist(), pois o resultado não é uma lista. String query = " SELECT COUNT (p) FROM Pessoa p"; TypedQuery <Long > query = manager. createquery (query, Long. class ); Long numerodepessoas = query. getsingleresult ();

Tipos de Resultados Valores Únicos A consulta abaixo devolve a maior idade entre as pessoas persistidas. String query = " SELECT MAX (p. idade ) FROM Pessoa p"; TypedQuery < Integer > query = manager. createquery (query, Integer. class ); Integer maioridade = query. getsingleresult ();

Resultados Especiais Algumas consultas possuem resultados complexos. Por exemplo, suponha que desejamos obter uma listagem com os nomes dos funcionários e o nome do departamento em que o funcionário trabalha. SELECT f.nome, f. departamento. nome FROM Funcionario f;

Resultados Especiais Nesse caso, o resultado será uma lista de array de Object. Para manipular essa lista, devemos lidar com o posicionamento dos dados nos arrays. 1 String query = " SELECT f.nome, f. departamento. nome FROM Funcionario f"; 2 Query query = manager. createquery ( query ); 3 List < Object []> lista = query. getresultlist (); 4 5 for ( Object [] tupla : lista ) { 6 System. out. println (" Funcionário : " + tupla [0]) ; 7 System. out. println (" Departamento : " + tupla [1]) ; 8 }

Paginação Supondo que exista uma grande quantidade de livros cadastrados no banco de dados, buscar todos os livros sem nenhum filtro vai sobrecarregar o tráfego da rede e a memória utilizada pela aplicação. Nesses casos, podemos aplicar o conceito de paginação para obter os livros aos poucos. A paginação do resultado de uma consulta é realizada através dos métodos setfirstresult() e setmaxresults(). TypedQuery <Livro > query = manager. createquery (" select livro from Livro livro ", Livro.class ); query. setfirstresult (10) ; query. setmaxresults (20) ; List <Livro > livros = query. getresultlist ();