SlideShare uma empresa Scribd logo
1 de 10
Baixar para ler offline
Programação II - Prof. Fernando dos Santos




                                Java Persistence API (JPA)
                                        Consultas

                                                Fernando dos Santos
                                             fernando.santos@udesc.br
Programação II - Prof. Fernando dos Santos




   Consultas
   • JPA oferece uma linguagem própria para consulta de entidades.
          – Portabilidade entre bancos.


   • Consultas são representadas e executadas por um objeto Query.

   • Exemplo de consulta para buscar todas as entidades no banco:

       Query consulta1 = em.createQuery("select p from Produto p");
       List<Produto> produtos = consulta1.getResultList();
       for(Produto prod : produtos){
          System.out.println("Nome: "+prod.getNome());
       }




                                                                      2
Programação II - Prof. Fernando dos Santos




   Como escrever consultas

                                                   select p from Produto p
                        todos os elementos “p”
                       da entidade com alias “p”

                              classe da entidade
                               (não é a tabela!)
                            alias para a entidade




                                                                         3
Programação II - Prof. Fernando dos Santos




   Consultas com parâmetros
   • Buscar uma única entidade com determinado código:
      Query consulta2 = em.createQuery("select p from Produto p where p.id = 3");
      Produto prod = (Produto)consulta2.getSingleResult();
      System.out.println("Nome: " + prod.getNome());


   • Busca uma única entidade passando dados via parâmetros:
     Query consulta3 = em.createQuery("select p from Produto p where p.id = :id");
     consulta3.setParameter("id", 1);
     Produto prod = (Produto)consulta3.getSingleResult();
     System.out.println("Nome: " + prod.getNome());


   • Operador like
    Query consulta4 =
              em.createQuery("select p from Produto p where p.nome like :nome");
    consulta4.setParameter("nome", “Arroz%");
    List<Produto> produtos = consulta4.getResultList();                        4
Programação II - Prof. Fernando dos Santos




   Consultas com funções de agrupamento
   • count() e retorno de valor simples
          Query consulta5 = em.createQuery("select count(p) from Produto p");
          Long quantidade = (Long)consulta5.getSingleResult();
          System.out.println("Quantidade: " + quantidade);

          Query consulta6 =
                em.createQuery("select count(distinct p.nome) from Produto p");
          Long quantidade = (Long)consulta6.getSingleResult();
          System.out.println("Quantidade de Nomes Distintos: " + quantidade);

   • count() e retorno de muitas “colunas” (simples e/ou de objetos)
       Query consulta7 =
           em.createQuery("select p.nome, count(p) from Produto p group by p.nome");
       List<Object[]> linhas = consulta7.getResultList();
       for (Object[] linha : linhas) { // cada elemento é um vetor, representa a linha
          String nome = (String)linha[0];
          Long count = (Long)linha[1];
          System.out.println(“nome: "+nome+" Quantidade: “+count);
                                                                                       5
       }
Programação II - Prof. Fernando dos Santos




   Consultas com subconsultas
   • Selecionar todas os produtos com valor maior que a média:
   • Base: ID Nome Preço          Resultado: ID Nome Preço
                       1     Arroz           1.50    3   Feijão    3.75
                       2     Açúcar          2.00
                       3     Feijão          3.75

           Query consulta =
                em.createQuery("select p1 from Produto p1
                                            where p1.precoUnitario >=
                                        ( select avg(p2.precoUnitario)
                                          from Produto p2 )“
                                );
          List<Produto> produtos = consulta.getResultList();
          for(Produto prod : produtos){
               System.out.println("Nome: "+prod.getNome());
          }                                                               6
Programação II - Prof. Fernando dos Santos




   Consultas com comparação na mesma entidade
   • Selecionar todos os produtos cujo valor é maior que o valor de um
     produto com determinado código:
   • Base: ID Nome Preço         Resultado: ID Nome Preço
                       1     Arroz           1.50     2   Açúcar     2.00
                       2     Açúcar          2.00     3   Feijão     3.75
                       3     Feijão          3.75

   Query consulta = em.createQuery("select p1
                                        from Produto p1, Produto p2
                                      where p1.precoUnitario > p2.precoUnitario
                                          and p2.id = :id");
   consulta.setParameter("id", 1);
   List<Produto> produtos = consulta.getResultList();
   for(Produto prod : produtos){
      System.out.println("Nome: "+prod.getNome());
   }
                                                                              7
Programação II - Prof. Fernando dos Santos




   Consultas com verificação de intervalo
   • Selecionar todos os produtos cujo preço esteja entre um valor
     mínimo e máximo, informados como parâmetro:
   • Base: ID Nome Preço         Resultado: ID Nome Preço
                       1     Arroz           1.50      1   Arroz      1.50
                       2     Açúcar          2.00      2   Açúcar     2.00
                       3     Feijão          3.75

   Query consulta = em.createQuery("select p
                                        from Produto p
                                      where p.precoUnitario
                                             between :valorMin and :valorMax");
   consulta.setParameter("valorMin", 1.50f); // “ f ” força conversão para float
   consulta.setParameter("valorMax", 2.50f);
   List<Produto> produtos = consulta.getResultList();
   for (Produto prod : produtos) {
      System.out.println("Nome: " + prod.getNome());
   }
                                                                               8
Programação II - Prof. Fernando dos Santos




   Exercício
   • Criar opções de consulta no sistema de imóveis:




          – imóveis de uma determinada cidade (informada pelo usuário)
          – imóveis com área superior a média de áreas
          – imóveis com a quantidade de quartos dentro de uma faixa informada
            pelo usuário (minimo e máximo)
          – quantidade de imóveis cadastrados
          – imóveis cadastrados por cidade
                                                                          9
Programação II - Prof. Fernando dos Santos




   Bibliografia
   • BAUER, Christian; KING, Gavin. Java Persistence com
     Hibernate. Rio de Janeiro: Ciência Moderna, 2007. 844 p.

   • BURKE, Bill; MONSON-HAEFEL, Richard. Enterprise
     JavaBeans 3.0. 5.ed. São Paulo: Prentice Hall, 2007. 538 p.

   • The Java EE 6 Tutorial, parte VI (Persistence)
          – http://download.oracle.com/javaee/6/tutorial/doc/




                                                                   10

Mais conteúdo relacionado

Destaque

PresentacióNppoint1
PresentacióNppoint1PresentacióNppoint1
PresentacióNppoint1sanchezinma
 
Apresentação PPMBB
Apresentação PPMBBApresentação PPMBB
Apresentação PPMBBAltosNegocios
 
2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simplesLukinha92
 
Presentación de diapositivas con enlaces a la web
Presentación de diapositivas con enlaces a la webPresentación de diapositivas con enlaces a la web
Presentación de diapositivas con enlaces a la webFulviaB
 

Destaque (6)

PresentacióNppoint1
PresentacióNppoint1PresentacióNppoint1
PresentacióNppoint1
 
Apresentação PPMBB
Apresentação PPMBBApresentação PPMBB
Apresentação PPMBB
 
2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples
 
Ortega Y Gasset
Ortega Y GassetOrtega Y Gasset
Ortega Y Gasset
 
Autoestima
AutoestimaAutoestima
Autoestima
 
Presentación de diapositivas con enlaces a la web
Presentación de diapositivas con enlaces a la webPresentación de diapositivas con enlaces a la web
Presentación de diapositivas con enlaces a la web
 

Semelhante a 3 jpa-consultas

4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-oneLukinha92
 
4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-oneLukinha92
 
4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-oneLukinha92
 
2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simplesLukinha92
 
Criação de aplicações web com python
Criação de aplicações web com pythonCriação de aplicações web com python
Criação de aplicações web com pythonHelder Vieira
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonGuilherme Garcia
 
Boas práticas de Automação de Testes
Boas práticas de Automação de TestesBoas práticas de Automação de Testes
Boas práticas de Automação de TestesCamilo Ribeiro
 
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...Rafael Jaques
 
Workshop: Testes automatizados, Refactoring e Design Patterns
Workshop: Testes automatizados, Refactoring e Design PatternsWorkshop: Testes automatizados, Refactoring e Design Patterns
Workshop: Testes automatizados, Refactoring e Design PatternsMauricio Andreazza
 
Teste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStrykerTeste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStrykerWashington Botelho
 
Programação "Estruturada" com Java
Programação "Estruturada" com JavaProgramação "Estruturada" com Java
Programação "Estruturada" com JavaLuiz Ricardo Silva
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitRobinson Castilho
 
Testando frontend utilizando ferraments JS
Testando frontend utilizando ferraments JSTestando frontend utilizando ferraments JS
Testando frontend utilizando ferraments JSFernando Fabricio
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 2
Implementação de Aplicações Móveis e Jogos com Python - Aula 2Implementação de Aplicações Móveis e Jogos com Python - Aula 2
Implementação de Aplicações Móveis e Jogos com Python - Aula 2Flávio Ribeiro
 
Python: Cabe no seu bolso, no seu micro, no seu cérebro.
Python: Cabe no seu bolso, no seu micro, no seu cérebro.Python: Cabe no seu bolso, no seu micro, no seu cérebro.
Python: Cabe no seu bolso, no seu micro, no seu cérebro.Rodrigo Senra
 
Ferramentas de automação de teste
Ferramentas de automação de testeFerramentas de automação de teste
Ferramentas de automação de testeMarcos Pessoa
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComunidade NetPonto
 

Semelhante a 3 jpa-consultas (20)

4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one
 
4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one
 
4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one
 
2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples
 
Criação de aplicações web com python
Criação de aplicações web com pythonCriação de aplicações web com python
Criação de aplicações web com python
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e Python
 
Vraptor
VraptorVraptor
Vraptor
 
Boas práticas de Automação de Testes
Boas práticas de Automação de TestesBoas práticas de Automação de Testes
Boas práticas de Automação de Testes
 
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
 
Workshop: Testes automatizados, Refactoring e Design Patterns
Workshop: Testes automatizados, Refactoring e Design PatternsWorkshop: Testes automatizados, Refactoring e Design Patterns
Workshop: Testes automatizados, Refactoring e Design Patterns
 
Teste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStrykerTeste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStryker
 
Programação "Estruturada" com Java
Programação "Estruturada" com JavaProgramação "Estruturada" com Java
Programação "Estruturada" com Java
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnit
 
Testando frontend utilizando ferraments JS
Testando frontend utilizando ferraments JSTestando frontend utilizando ferraments JS
Testando frontend utilizando ferraments JS
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 2
Implementação de Aplicações Móveis e Jogos com Python - Aula 2Implementação de Aplicações Móveis e Jogos com Python - Aula 2
Implementação de Aplicações Móveis e Jogos com Python - Aula 2
 
Workshop Django
Workshop DjangoWorkshop Django
Workshop Django
 
Bio python
Bio pythonBio python
Bio python
 
Python: Cabe no seu bolso, no seu micro, no seu cérebro.
Python: Cabe no seu bolso, no seu micro, no seu cérebro.Python: Cabe no seu bolso, no seu micro, no seu cérebro.
Python: Cabe no seu bolso, no seu micro, no seu cérebro.
 
Ferramentas de automação de teste
Ferramentas de automação de testeFerramentas de automação de teste
Ferramentas de automação de teste
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 

Mais de Lukinha92

5 jpa-heranca
5 jpa-heranca5 jpa-heranca
5 jpa-herancaLukinha92
 
4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-many4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-manyLukinha92
 
5 jpa-heranca
5 jpa-heranca5 jpa-heranca
5 jpa-herancaLukinha92
 
4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-many4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-manyLukinha92
 
3 jpa-consultas
3 jpa-consultas3 jpa-consultas
3 jpa-consultasLukinha92
 
2 2-unidade-persistencia
2 2-unidade-persistencia2 2-unidade-persistencia
2 2-unidade-persistenciaLukinha92
 

Mais de Lukinha92 (8)

5 jpa-heranca
5 jpa-heranca5 jpa-heranca
5 jpa-heranca
 
4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-many4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-many
 
1 jdbc
1 jdbc1 jdbc
1 jdbc
 
5 jpa-heranca
5 jpa-heranca5 jpa-heranca
5 jpa-heranca
 
4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-many4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-many
 
3 jpa-consultas
3 jpa-consultas3 jpa-consultas
3 jpa-consultas
 
2 2-unidade-persistencia
2 2-unidade-persistencia2 2-unidade-persistencia
2 2-unidade-persistencia
 
1 jdbc
1 jdbc1 jdbc
1 jdbc
 

3 jpa-consultas

  • 1. Programação II - Prof. Fernando dos Santos Java Persistence API (JPA) Consultas Fernando dos Santos fernando.santos@udesc.br
  • 2. Programação II - Prof. Fernando dos Santos Consultas • JPA oferece uma linguagem própria para consulta de entidades. – Portabilidade entre bancos. • Consultas são representadas e executadas por um objeto Query. • Exemplo de consulta para buscar todas as entidades no banco: Query consulta1 = em.createQuery("select p from Produto p"); List<Produto> produtos = consulta1.getResultList(); for(Produto prod : produtos){ System.out.println("Nome: "+prod.getNome()); } 2
  • 3. Programação II - Prof. Fernando dos Santos Como escrever consultas select p from Produto p todos os elementos “p” da entidade com alias “p” classe da entidade (não é a tabela!) alias para a entidade 3
  • 4. Programação II - Prof. Fernando dos Santos Consultas com parâmetros • Buscar uma única entidade com determinado código: Query consulta2 = em.createQuery("select p from Produto p where p.id = 3"); Produto prod = (Produto)consulta2.getSingleResult(); System.out.println("Nome: " + prod.getNome()); • Busca uma única entidade passando dados via parâmetros: Query consulta3 = em.createQuery("select p from Produto p where p.id = :id"); consulta3.setParameter("id", 1); Produto prod = (Produto)consulta3.getSingleResult(); System.out.println("Nome: " + prod.getNome()); • Operador like Query consulta4 = em.createQuery("select p from Produto p where p.nome like :nome"); consulta4.setParameter("nome", “Arroz%"); List<Produto> produtos = consulta4.getResultList(); 4
  • 5. Programação II - Prof. Fernando dos Santos Consultas com funções de agrupamento • count() e retorno de valor simples Query consulta5 = em.createQuery("select count(p) from Produto p"); Long quantidade = (Long)consulta5.getSingleResult(); System.out.println("Quantidade: " + quantidade); Query consulta6 = em.createQuery("select count(distinct p.nome) from Produto p"); Long quantidade = (Long)consulta6.getSingleResult(); System.out.println("Quantidade de Nomes Distintos: " + quantidade); • count() e retorno de muitas “colunas” (simples e/ou de objetos) Query consulta7 = em.createQuery("select p.nome, count(p) from Produto p group by p.nome"); List<Object[]> linhas = consulta7.getResultList(); for (Object[] linha : linhas) { // cada elemento é um vetor, representa a linha String nome = (String)linha[0]; Long count = (Long)linha[1]; System.out.println(“nome: "+nome+" Quantidade: “+count); 5 }
  • 6. Programação II - Prof. Fernando dos Santos Consultas com subconsultas • Selecionar todas os produtos com valor maior que a média: • Base: ID Nome Preço Resultado: ID Nome Preço 1 Arroz 1.50 3 Feijão 3.75 2 Açúcar 2.00 3 Feijão 3.75 Query consulta = em.createQuery("select p1 from Produto p1 where p1.precoUnitario >= ( select avg(p2.precoUnitario) from Produto p2 )“ ); List<Produto> produtos = consulta.getResultList(); for(Produto prod : produtos){ System.out.println("Nome: "+prod.getNome()); } 6
  • 7. Programação II - Prof. Fernando dos Santos Consultas com comparação na mesma entidade • Selecionar todos os produtos cujo valor é maior que o valor de um produto com determinado código: • Base: ID Nome Preço Resultado: ID Nome Preço 1 Arroz 1.50 2 Açúcar 2.00 2 Açúcar 2.00 3 Feijão 3.75 3 Feijão 3.75 Query consulta = em.createQuery("select p1 from Produto p1, Produto p2 where p1.precoUnitario > p2.precoUnitario and p2.id = :id"); consulta.setParameter("id", 1); List<Produto> produtos = consulta.getResultList(); for(Produto prod : produtos){ System.out.println("Nome: "+prod.getNome()); } 7
  • 8. Programação II - Prof. Fernando dos Santos Consultas com verificação de intervalo • Selecionar todos os produtos cujo preço esteja entre um valor mínimo e máximo, informados como parâmetro: • Base: ID Nome Preço Resultado: ID Nome Preço 1 Arroz 1.50 1 Arroz 1.50 2 Açúcar 2.00 2 Açúcar 2.00 3 Feijão 3.75 Query consulta = em.createQuery("select p from Produto p where p.precoUnitario between :valorMin and :valorMax"); consulta.setParameter("valorMin", 1.50f); // “ f ” força conversão para float consulta.setParameter("valorMax", 2.50f); List<Produto> produtos = consulta.getResultList(); for (Produto prod : produtos) { System.out.println("Nome: " + prod.getNome()); } 8
  • 9. Programação II - Prof. Fernando dos Santos Exercício • Criar opções de consulta no sistema de imóveis: – imóveis de uma determinada cidade (informada pelo usuário) – imóveis com área superior a média de áreas – imóveis com a quantidade de quartos dentro de uma faixa informada pelo usuário (minimo e máximo) – quantidade de imóveis cadastrados – imóveis cadastrados por cidade 9
  • 10. Programação II - Prof. Fernando dos Santos Bibliografia • BAUER, Christian; KING, Gavin. Java Persistence com Hibernate. Rio de Janeiro: Ciência Moderna, 2007. 844 p. • BURKE, Bill; MONSON-HAEFEL, Richard. Enterprise JavaBeans 3.0. 5.ed. São Paulo: Prentice Hall, 2007. 538 p. • The Java EE 6 Tutorial, parte VI (Persistence) – http://download.oracle.com/javaee/6/tutorial/doc/ 10