Introdução SELECT FROM WHERE GROUP BY HAVING ORDER BY Java Persistence Query Language JPQL Prof. Enzo Seraphim
Definições Tornar SQL orientado a objetos Classes e propriedades ao invés de Tabelas e colunas Polimorfismo Associações Três maneiras de se fazer consultas : Linguagem de consulta orientada a objeto Criteria - API orientada a objeto para busca SQL nativo
Definições Total suporte a operações relacionais Joins Projeções Funções agregadas e agrupamento Ordenação SubQueries Chamadas a funções SQL
Exemplo Cliente -login:string -cpf:string -nome:string Locacao * 1 -id:int -locacao:calendar -devolucao:calendar Filme -codigo:int -nome:string package br.edu.unifei.bd.locadora; import javax.persistence.entity; import javax.persistence.generatedvalue; import javax.persistence.id; @Entity public class Filme { @Id @GeneratedValue private int codigo; private String nome; } //... Get s e Set s
Exemplo Cliente -login:string -cpf:string -nome:string Locacao * 1 -id:int -locacao:calendar -devolucao:calendar Filme -codigo:int -nome:string package br.edu.unifei.bd.locadora;... @Entity public class Locacao { @Id @GeneratedValue private int id; @OneToOne private Filme filme; @ManyToOne private Cliente cliente; } private Calendar locacao; private Calendar devolucao; //... Get s e Set s
Exemplo Cliente -login:string -cpf:string -nome:string Locacao * 1 -id:int -locacao:calendar -devolucao:calendar Filme -codigo:int -nome:string package br.edu.unifei.bd.locadora;... @Entity public class Cliente { @Id private String login; private String CPF; private String nome; @OneToMany private List<Locacao> locacoes = new ArrayList<Locacao>(); } //... Get s e Set s
Trabalhando com persistencia :EntityManagerFactory :EntityManager persistence. xml createentitymanager() public class App{ public static void main (String [] args ){ EntityManagerFactory emf = Persistence.createEntityManagerFactory("locadoraPU"); EntityManager em = emf.createentitymanager(); List< > l = em.createquery(" " ).getresultlist(); Iterator< > it = l.iterator() while(it.hasnext()){ it.next(); } em.close(); emf.close(); }}
Trabalhando com persistencia emf:entitymanagerfactory persistence.xml createentitymanager() em:entitymanager createquery() :Query getsingleresult() getresultlist() :Iterator<> hasnext() next() :List<> iterator() size()
Formas de Consultas Cria uma consulta (Query) Query q = em.createquery("jpql"); Retornar um único resultado Objeto o = em.createquery("jpql" ).getsingleresult(); Retornar uma lista de resultados (List) List l = em.createquery("jpql" ).getresultlist();
Formas de Consultas Paginação da consulta Query q = em.createquery("jpql"); q.setfirstresult(20); q.setmaxresults(30); List l = q.getresultlist();
Introdução SELECT FROM WHERE GROUP BY HAVING ORDER BY Linguagem de consulta orientada a objeto Prof. Enzo Seraphim
Cláusula SELECT Seleciona atributos das classes List<String> cli = em.createquery ( "select c.nome from Cliente c" ).getresultlist(); Iterator it = cli.iterator(); while (it.hasnext()) { String s = (String) it.next(); System.out.println("nome: " + s); }
Cláusula SELECT Seleciona classe em uma junção List cli = em.createquery ( "select c " + "from Cliente c " + "where l.id = 1").getResultList(); Iterator it = cli.iterator(); while (it.hasnext()){ Cliente c = (Cliente)it.next(); System.out.println ("nome: " + c.getnome()); }
Introdução SELECT FROM WHERE GROUP BY HAVING ORDER BY Linguagem de consulta orientada a objeto Prof. Enzo Seraphim
Cláusula FROM Seleciona objetos de uma determina classe List filmes = em.createquery( "from Filme").getResultList(); Iterator it = filmes.iterator(); while (it.hasnext()){ Filme f = (Filme)it.next(); System.out.print("titulo"+f.getNome()); }
Introdução SELECT FROM WHERE GROUP BY HAVING ORDER BY Linguagem de consulta orientada a objeto Prof. Enzo Seraphim
Cláusula WHERE Especifica quais objetos das classes da cláusula FROM serão selecionados List filmes = em.createquery ("from Filme f where f.nome='hp 1'" ).getresultlist(); Atributo da classe
Parametro Cláusula WHERE List clientes = em.createquery( from Cliente f where f.nome=? ).setstring(0, "ze").getresultlist(); List clientes = em.createquery( from Cliente f where f.nome=:nome ).setstring(nome, "maria").getresultlist(); List clientes = em.createquery( from Cliente f where f.nome like? and + f.login like? ).setstring(0, "ma%").setstring(1, "m%").getresultlist();
Operadores de consulta JPQL suporta os mesmos operadores que SQL Operadores do JPQL: Comparação: =, <>, <, >, >=, <=, between, not between, in, not in Nulidade: is null, is not null Aritméticos: +, -, /, *, %, parênteses O operador like funciona da mesma forma que SQL Pode usar funções SQL se o banco suportar
Operador IN Determina se o valor de uma expressão é igual a algum dos vários valores em uma lista especificada. List filmes = em.createquery ( "from Filme f " + "where f.nome IN ('HP 1', 'HP 2')" ).getresultlist();
Operador BETWEEN...AND Determina se o valor de uma expressão se situa dentro de um intervalo especificado de valores. List filmes = em.createquery ( "from Filme f " + "where f.preco between 2 and 3" ).getresultlist();
Operador LIKE Compara uma expressão de seqüência. Caractere curinga (por exemplo, Like MAK %, para MAKROMBOOKS ). Caractere isolado (por exemplo, Like _OSE, para JOSE E ROSE ) List filmes = em.createquery ( "from Filme f " + "where f.nome like 'HP %'" ).getresultlist();
Operador IS NULL Determina se o valor de uma expressão é nulo. List filmes = em.createquery ( "from Locacao l " + "where l.datadevolucao is null" ).getresultlist();
Junção Seleciona classe em uma junção List cli = em.createquery( "select c " + "from Cliente c, Locacao l, Filme f "+ "where l.cliente = c and l.filme = f "+ "and f.nome = 'HP 4' ").getresultlist(); Iterator it = cli.iterator(); while (it.hasnext()){ Cliente c = (Cliente)it.next(); System.out.print("titulo"+c.getNome()); }
Introdução SELECT FROM WHERE GROUP BY HAVING ORDER BY Linguagem de consulta orientada a objeto Prof. Enzo Seraphim
Função AVG Calcula a média aritmética de um conjunto de valores contido em um campo especificado em uma consulta. List filmes = session.createquery( "select avg(f.preco) from Filme f" ).getresultlist(); Iterator it = filmes.iterator(); while (it.hasnext()) { Double f = (Double) it.next(); System.out.println("preco: " + f); }
Função COUNT count - Calcula o número de registros retornado por uma consulta. A função Count não conta registros que tenham campos Null, exceto quando expr for o caractere curinga asterisco (*). min, max - Retornam o mínimo ou o máximo de um conjunto de valores contido em um campo especificado em uma consulta. sum - Retorna a soma de um conjunto de valores contido em um campo especificado em uma consulta. A função Sum ignora os registros que contenham campos Null.
Cláusula GROUP BY Combina registros com valores idênticos na lista de campos especificada em um único registro. O comando group by pode ser usado com as funções avg, count, min, max, sum de um agrupamento
Cláusula GROUP BY List filmes = session.createquery( "select c.nome, avg(f.preco) from Cliente c, Locacao l, Filme f where l.cliente = c and l.filme = f group by c.nome").getresultlist(); Iterator it = filmes.iterator(); while (it.hasnext()) { Object[] t = (Object[]) it.next(); System.out.println("nome=" + t[0] + " media=" + t[1]); }
Introdução SELECT FROM WHERE GROUP BY HAVING ORDER BY Linguagem de consulta orientada a objeto Prof. Enzo Seraphim
Cláusula HAVING Especifica quais registros agrupados são exibidos na instrução SELECT com uma cláusula GROUP BY. É uma clásula where executada depois do group by. O comando group by pode ser usado com as funções avg, count, min, max, sum de um agrupamento
Cláusula GROUP BY List filmes = session.createquery( "select c.nome, avg(f.preco) from Cliente c, Locacao l, Filme f where l.cliente = c and l.filme = f group by c.nome having avg(f.preco) > min(f.preco)" ).getresultlist(); Iterator it = filmes.iterator(); while (it.hasnext()) { Object[] t = (Object[]) it.next(); System.out.println("nome=" + t[0] + " media=" + t[1]); }
Introdução FROM WHERE GROUP BY HAVING ORDER BY Linguagem de consulta orientada a objeto Prof. Enzo Seraphim
Cláusula ORDER BY Classifica os objetos resultantes de uma consulta em um campo ou campos especificados, em ordem crescente ou decrescente. Os registros são classificados pelo primeiro campo após ORDER BY e em caso de empate classificados pelo segundo campo e assim por diante. List filmes = session.createquery ( "from Filme f order by f.nome desc" ).getresultlist();
Os logotipos, marcas comerciais e nomes de produtos citados nesta publicação tem apenas o propósitos de identificação e podem ser marcas registradas de suas respectivas companhias. Java Persistence Query Language JPQL Prof. Enzo Seraphim