SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Downloaden Sie, um offline zu lesen
Programação Orientada a Objetos

             Hibernate
            (Consultas)


Objetivo: Recuperar dados de bancos de
 dados usando o framework Hibernate
       Prof. Nécio de Lima Veras
Introdução

• Existem três maneiras de se realizar
  consultas usando o hibernate:
  – HQL (Hibernate Query Language);

  – Critéria (consultas usando os próprios objetos);

  – SQL (consultas com SQL nativo);
HQL

• SQL orientado a objetos com:
   – Classes e propriedades ao invés de Tabelas e colunas;
   – Polimorfismo;
   – Associações;

• Oferece Total suporte a operações relacionais, tais como:
  – Joins;
  – Projeções;
  – Funções agregadas e agrupamento;
  – Ordenação;
  – SubQueries;
  – Chamadas a funções SQL;
Exemplos

• Beeeeeeeem simples:
  – “Devolva todos os “alunos”:
   List alunos = session.createQuery(“from
   Aluno”).list();

• Com paginação:
    Query query = session.createQuery(“from
    Aluno”);
    query.setFirstResult(20);
    query.setMaxResults(30);

   List filmes = query.list();
Exemplos

• Com ordenação:
   List locacoes =
   session.createQuery(“from Locacao l
   order by l.dataLocacao desc”);
• Com apenas um resultado:
   Query query =
   session.createQuery(“from Locacao l
   order by l.dataLocacao desc”);
   Locacao loc = query.uniqueResult();
Com parâmetros




• Usando between:
  – createQuery(“from Especializacao where id
    between :CodInicial and :CodFinal”);
Com paramêtros (variação)

List <Cliente> clientes =
session.createQuery("from CLiente where
vNome like ?").setString(0, "%").list();

for (Cliente c: clientes){
    JOptionPane.showMessageDialog(null,
    c.getNome());
}

Note que agora não especificamos o
identificador do parâmetro;
Com Joins

• Exemplo:
   – “Busque todos os clientes com suas locações
     efetuadas após uma determinada Data”;
  select c from Cliente c left join [fetch] c.locacaoes
  l where l.dataLocacao > :Data

• Entendendo a estratégia de fetching:
  – Com o fetch: Coleções já inicializadas;
  – Sem o fetch: lazy collections;
Com função agregada

• Função max:

 int maxCod = (Integer)
 session.createQuery("select max(id) from
 Cliente").uniqueResult();

 JOptionPane.showMessageDialog(null,
 "Código máximo armazenado: " +
 maxCod);
Mais sobre o HQL

• HQL suporta os mesmos operadores da
  linguagem SQL;
• Operadores do HQL:
  – 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;
Consultas “nomeadas”

• Podemos nomear uma consulta;
• Exemplo:
     @NamedQuery (name="getAllClients", query="from Cliente")
     public class Cliente extends Pessoa {…}

   – Na classe que chama a consulta:
     Dao<Cliente> dao = new Dao<Cliente>();
     Session session = dao.getSession();
     List <Cliente> clientes =
     session.getNamedQuery("getAllClients").list();
     for (Cliente c: clientes){
         JOptionPane.showMessageDialog(null, c.getNome());
     }
     ...
Criteria API

• Ideal para quem NÃO conhece linguagens
  de consulta;
• Exemplo 1:
   Criteria cCliente =
   session.createCriteria(Cliente.class);
   cCliente.add(Restrictions.like("nome", "%"));
   List <Cliente> clientes = cCliente.list();
   for (Cliente c: clientes){
        JOptionPane.showMessageDialog(null, c.getNome());
   }
Criteria API

• Exemplo 2 (cláusula where):
   Criteria cCliente =
   session.createCriteria(Cliente.class);
   cCliente.add(Restrictions.sqlRestriction("vNom
   e = 'Nécio'"));
   List <Cliente> clientes = cCliente.list();
   for (Cliente c: clientes){
        JOptionPane.showMessageDialog(null, c.getNome());
   }
Criteria API

• Exemplo 3 (Funções agregadas):
   Criteria cCliente =
   session.createCriteria(Cliente.class);

   cCliente.setProjection(Projections.max("id"));

   int maxCod = (Integer) cCliente.uniqueResult();

   JOptionPane.showMessageDialog(null, "Maior
   código registrado: " + maxCod);
Boas Práticas

• Uso de DAOs (Generic DAOs);
• Patterns (padrões);
  – Session-per-request;
    • Uma sessão é aberta no inicio de uma requisição e
      fechada ao final;

• Cuidado com os Anti-patters;
  – Session-per-operation
    • Uma sessão é aberta para cada operação
      executada;
Exercício

• A figura a seguir, mostra a estrutura de um
  banco de dados que está povoado;

• Modele-o (idêntico à figura – inclusive os
  nomes dos campos e tabelas e
  principalmente com as devidas letras
  maiúsculas e minúsculas) e faça as
  consultas pedidas no slide seguinte;
DDL - Endereços
Consultas
1. Mostre todos os estados cadastrados na tabela estado.
2. Mostre a cidade cidade cujo código seja: 5658.
3. Mostre agora TODAS as cidades do Ceará;
4. Ordene a questão anterior pela descrição (ordem alfabética).
5. Ainda na tabela cidade, mostre as cidades que contenham a palavra
   Piauí na descrição.
6. Mostre o(s) bairro(s) da cidade de Buriti dos Lopes-PI.
7. Mostre a descrição e abreviatura dos bairros cujo CEP é 62300000.
8. Selecione todos os CEP’s das cidades do estado do PI.
9. Mostre os logradouros cujo CEP inicial com 642 e terminam com 220
   (com as respectivas descrições das cidades e estados);
10. Conte quantas cidades existem no estado do Piauí;
11. Mostre o último logradouro inserido no banco de dados.
12. Mostre a quantidade de bairro do estado do Ceará.
Referências

• Material sobre Hibernate LES/PUC-Rio;

• Jobson Ronan {jrjs@cin.ufpe.br}

• Guilherme Kelly {gkmo@cin.ufpe.br}

• Ely Júnior (ely_b_jr@hotmail.com)

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

JPA com Hibernate
JPA com HibernateJPA com Hibernate
JPA com Hibernate
 
Boas práticas com jpa 2 e hibernate flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate flisol 2012
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
JPA - Java Persistence API
JPA - Java Persistence APIJPA - Java Persistence API
JPA - Java Persistence API
 
Java 14
Java 14Java 14
Java 14
 
Spring Data Jpa
Spring Data JpaSpring Data Jpa
Spring Data Jpa
 
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
 
Jpa – Java Persistence Api
Jpa – Java Persistence ApiJpa – Java Persistence Api
Jpa – Java Persistence Api
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Migrando para o PHP 5
Migrando para o PHP 5Migrando para o PHP 5
Migrando para o PHP 5
 
Apostila hibernate
Apostila hibernateApostila hibernate
Apostila hibernate
 
Doctrine2 Seminário PHP
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHP
 
BRMS - Business Rules Management System
BRMS - Business Rules Management SystemBRMS - Business Rules Management System
BRMS - Business Rules Management System
 
Doctrine for dummies
Doctrine for dummiesDoctrine for dummies
Doctrine for dummies
 
Banco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLBanco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQL
 
xDocLet - Geração de código com xdoclet
xDocLet - Geração de código com xdocletxDocLet - Geração de código com xdoclet
xDocLet - Geração de código com xdoclet
 
Tag Libraries e JSTL
Tag Libraries e JSTLTag Libraries e JSTL
Tag Libraries e JSTL
 
Minicurso PostgreSQL
Minicurso PostgreSQLMinicurso PostgreSQL
Minicurso PostgreSQL
 
2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples
 
J530 14 xdoclet
J530 14 xdocletJ530 14 xdoclet
J530 14 xdoclet
 

Andere mochten auch

JavaScript ninja com jQuery
JavaScript ninja com jQueryJavaScript ninja com jQuery
JavaScript ninja com jQueryReinaldo Junior
 
Introdução ao Pensamento Inventivo Sistemático
Introdução ao Pensamento Inventivo SistemáticoIntrodução ao Pensamento Inventivo Sistemático
Introdução ao Pensamento Inventivo SistemáticoSylvio Silveira Santos
 
Javascript
JavascriptJavascript
JavascriptTiago
 
Introdução às Bibliotecas jQuery/ jQuery UI
Introdução às Bibliotecas jQuery/ jQuery UIIntrodução às Bibliotecas jQuery/ jQuery UI
Introdução às Bibliotecas jQuery/ jQuery UILenon Fachiano
 
Aprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAfonso Gomes
 
Tutorial sistema vendas_em_java_com_swing
Tutorial sistema vendas_em_java_com_swingTutorial sistema vendas_em_java_com_swing
Tutorial sistema vendas_em_java_com_swingEverson Wolf
 
SISTEMA WEB PARA ADMINISTRAÇÃO, GERENCIAMENTO E SUPORTE À DECISÃO EM PROJETOS...
SISTEMA WEB PARA ADMINISTRAÇÃO, GERENCIAMENTO E SUPORTE À DECISÃO EM PROJETOS...SISTEMA WEB PARA ADMINISTRAÇÃO, GERENCIAMENTO E SUPORTE À DECISÃO EM PROJETOS...
SISTEMA WEB PARA ADMINISTRAÇÃO, GERENCIAMENTO E SUPORTE À DECISÃO EM PROJETOS...João Gabriel Lima
 

Andere mochten auch (20)

JavaScript ninja com jQuery
JavaScript ninja com jQueryJavaScript ninja com jQuery
JavaScript ninja com jQuery
 
Boas Práticas em jQuery
Boas Práticas em jQueryBoas Práticas em jQuery
Boas Práticas em jQuery
 
Introdução ao Pensamento Inventivo Sistemático
Introdução ao Pensamento Inventivo SistemáticoIntrodução ao Pensamento Inventivo Sistemático
Introdução ao Pensamento Inventivo Sistemático
 
Curso javascript básico
Curso javascript básicoCurso javascript básico
Curso javascript básico
 
Javascript
JavascriptJavascript
Javascript
 
Introdução às Bibliotecas jQuery/ jQuery UI
Introdução às Bibliotecas jQuery/ jQuery UIIntrodução às Bibliotecas jQuery/ jQuery UI
Introdução às Bibliotecas jQuery/ jQuery UI
 
Aprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCD
 
Java swing
Java swingJava swing
Java swing
 
Tutorial sistema vendas_em_java_com_swing
Tutorial sistema vendas_em_java_com_swingTutorial sistema vendas_em_java_com_swing
Tutorial sistema vendas_em_java_com_swing
 
Java script aula 04 - objeto array
Java script   aula 04 - objeto arrayJava script   aula 04 - objeto array
Java script aula 04 - objeto array
 
SISTEMA WEB PARA ADMINISTRAÇÃO, GERENCIAMENTO E SUPORTE À DECISÃO EM PROJETOS...
SISTEMA WEB PARA ADMINISTRAÇÃO, GERENCIAMENTO E SUPORTE À DECISÃO EM PROJETOS...SISTEMA WEB PARA ADMINISTRAÇÃO, GERENCIAMENTO E SUPORTE À DECISÃO EM PROJETOS...
SISTEMA WEB PARA ADMINISTRAÇÃO, GERENCIAMENTO E SUPORTE À DECISÃO EM PROJETOS...
 
Javascript aula 01 - visão geral
Javascript   aula 01 - visão geralJavascript   aula 01 - visão geral
Javascript aula 01 - visão geral
 
Java script aula 03 - objetos
Java script   aula 03 - objetosJava script   aula 03 - objetos
Java script aula 03 - objetos
 
Java script aula 02 - operadores
Java script   aula 02 - operadoresJava script   aula 02 - operadores
Java script aula 02 - operadores
 
Java script aula 06 - dom
Java script   aula 06 - domJava script   aula 06 - dom
Java script aula 06 - dom
 
Java script aula 08 - formulários
Java script   aula 08 - formuláriosJava script   aula 08 - formulários
Java script aula 08 - formulários
 
Java script aula 10 - angularjs
Java script   aula 10 - angularjsJava script   aula 10 - angularjs
Java script aula 10 - angularjs
 
Java script aula 07 - eventos
Java script   aula 07 - eventosJava script   aula 07 - eventos
Java script aula 07 - eventos
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Gerenciadores de Layout
Gerenciadores de LayoutGerenciadores de Layout
Gerenciadores de Layout
 

Ähnlich wie HQL, Criteria e consultas com Hibernate

Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Osny Pereira Filho
 
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.orgBarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.orgjqrd
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOWesley Lemos
 
T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012Rodrigo Ribeiro
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdoJorge Luís Gregório
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Saulo Arruda
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.jsGiovanni Bassi
 
Programação Web com PHP 7.x
Programação Web com PHP 7.xProgramação Web com PHP 7.x
Programação Web com PHP 7.xNorton Guimarães
 
Automação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanAutomação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanLucas Amaral
 
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Daniel Makiyama
 
Backbone.js nas trincheiras
Backbone.js nas trincheirasBackbone.js nas trincheiras
Backbone.js nas trincheirasLambda 3
 
Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Felipe Pimentel
 

Ähnlich wie HQL, Criteria e consultas com Hibernate (20)

Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01
 
Python 04
Python 04Python 04
Python 04
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.orgBarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012
 
Otimizando a performance com in memory no sql 2016
Otimizando a performance com in memory no sql 2016Otimizando a performance com in memory no sql 2016
Otimizando a performance com in memory no sql 2016
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
 
Node.js: serious business
Node.js: serious businessNode.js: serious business
Node.js: serious business
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.js
 
Aula1
Aula1Aula1
Aula1
 
Programação Web com PHP 7.x
Programação Web com PHP 7.xProgramação Web com PHP 7.x
Programação Web com PHP 7.x
 
Automação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanAutomação de testes de API utilizando Postman
Automação de testes de API utilizando Postman
 
Web App Flaws - SQL Injection
Web App Flaws - SQL InjectionWeb App Flaws - SQL Injection
Web App Flaws - SQL Injection
 
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
 
Backbone.js nas trincheiras
Backbone.js nas trincheirasBackbone.js nas trincheiras
Backbone.js nas trincheiras
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]
 

Mehr von Nécio de Lima Veras

Introdução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosIntrodução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosNécio de Lima Veras
 
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...Nécio de Lima Veras
 
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMoIntrodução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMoNécio de Lima Veras
 
Jason: Componentes personalizados
Jason: Componentes personalizados Jason: Componentes personalizados
Jason: Componentes personalizados Nécio de Lima Veras
 
Ambientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentesAmbientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentesNécio de Lima Veras
 
Arquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agentsArquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agentsNécio de Lima Veras
 
Especificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentesEspecificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentesNécio de Lima Veras
 
Introdução aos Sistemas operacionais
Introdução aos Sistemas operacionaisIntrodução aos Sistemas operacionais
Introdução aos Sistemas operacionaisNécio de Lima Veras
 
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...Nécio de Lima Veras
 

Mehr von Nécio de Lima Veras (20)

Introdução ao JavaFX
Introdução ao JavaFXIntrodução ao JavaFX
Introdução ao JavaFX
 
Introdução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosIntrodução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmos
 
Versionamento com git
Versionamento com gitVersionamento com git
Versionamento com git
 
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
 
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMoIntrodução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
 
Jason: Componentes personalizados
Jason: Componentes personalizados Jason: Componentes personalizados
Jason: Componentes personalizados
 
Agentes inteligentes com jason
Agentes inteligentes com jasonAgentes inteligentes com jason
Agentes inteligentes com jason
 
Ambientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentesAmbientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentes
 
Arquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agentsArquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agents
 
Revisão de matemática
Revisão de matemáticaRevisão de matemática
Revisão de matemática
 
Especificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentesEspecificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentes
 
Notas sobre agentes inteligentes
Notas sobre agentes inteligentesNotas sobre agentes inteligentes
Notas sobre agentes inteligentes
 
Mapeamento de herança OR
Mapeamento de herança ORMapeamento de herança OR
Mapeamento de herança OR
 
Relacionamentos do mapeamento OR
Relacionamentos do mapeamento ORRelacionamentos do mapeamento OR
Relacionamentos do mapeamento OR
 
Introdução à linguagem UML
Introdução à linguagem UMLIntrodução à linguagem UML
Introdução à linguagem UML
 
Introdução aos Sistemas operacionais
Introdução aos Sistemas operacionaisIntrodução aos Sistemas operacionais
Introdução aos Sistemas operacionais
 
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...
 
Classes abstratas e interfaces
Classes abstratas e interfacesClasses abstratas e interfaces
Classes abstratas e interfaces
 
Desenvolvimento ágil de software
Desenvolvimento ágil de softwareDesenvolvimento ágil de software
Desenvolvimento ágil de software
 
Internet: conceitos e segurança
Internet: conceitos e segurançaInternet: conceitos e segurança
Internet: conceitos e segurança
 

HQL, Criteria e consultas com Hibernate

  • 1. Programação Orientada a Objetos Hibernate (Consultas) Objetivo: Recuperar dados de bancos de dados usando o framework Hibernate Prof. Nécio de Lima Veras
  • 2. Introdução • Existem três maneiras de se realizar consultas usando o hibernate: – HQL (Hibernate Query Language); – Critéria (consultas usando os próprios objetos); – SQL (consultas com SQL nativo);
  • 3. HQL • SQL orientado a objetos com: – Classes e propriedades ao invés de Tabelas e colunas; – Polimorfismo; – Associações; • Oferece Total suporte a operações relacionais, tais como: – Joins; – Projeções; – Funções agregadas e agrupamento; – Ordenação; – SubQueries; – Chamadas a funções SQL;
  • 4. Exemplos • Beeeeeeeem simples: – “Devolva todos os “alunos”: List alunos = session.createQuery(“from Aluno”).list(); • Com paginação: Query query = session.createQuery(“from Aluno”); query.setFirstResult(20); query.setMaxResults(30); List filmes = query.list();
  • 5. Exemplos • Com ordenação: List locacoes = session.createQuery(“from Locacao l order by l.dataLocacao desc”); • Com apenas um resultado: Query query = session.createQuery(“from Locacao l order by l.dataLocacao desc”); Locacao loc = query.uniqueResult();
  • 6. Com parâmetros • Usando between: – createQuery(“from Especializacao where id between :CodInicial and :CodFinal”);
  • 7. Com paramêtros (variação) List <Cliente> clientes = session.createQuery("from CLiente where vNome like ?").setString(0, "%").list(); for (Cliente c: clientes){ JOptionPane.showMessageDialog(null, c.getNome()); } Note que agora não especificamos o identificador do parâmetro;
  • 8. Com Joins • Exemplo: – “Busque todos os clientes com suas locações efetuadas após uma determinada Data”; select c from Cliente c left join [fetch] c.locacaoes l where l.dataLocacao > :Data • Entendendo a estratégia de fetching: – Com o fetch: Coleções já inicializadas; – Sem o fetch: lazy collections;
  • 9. Com função agregada • Função max: int maxCod = (Integer) session.createQuery("select max(id) from Cliente").uniqueResult(); JOptionPane.showMessageDialog(null, "Código máximo armazenado: " + maxCod);
  • 10. Mais sobre o HQL • HQL suporta os mesmos operadores da linguagem SQL; • Operadores do HQL: – 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;
  • 11. Consultas “nomeadas” • Podemos nomear uma consulta; • Exemplo: @NamedQuery (name="getAllClients", query="from Cliente") public class Cliente extends Pessoa {…} – Na classe que chama a consulta: Dao<Cliente> dao = new Dao<Cliente>(); Session session = dao.getSession(); List <Cliente> clientes = session.getNamedQuery("getAllClients").list(); for (Cliente c: clientes){ JOptionPane.showMessageDialog(null, c.getNome()); } ...
  • 12. Criteria API • Ideal para quem NÃO conhece linguagens de consulta; • Exemplo 1: Criteria cCliente = session.createCriteria(Cliente.class); cCliente.add(Restrictions.like("nome", "%")); List <Cliente> clientes = cCliente.list(); for (Cliente c: clientes){ JOptionPane.showMessageDialog(null, c.getNome()); }
  • 13. Criteria API • Exemplo 2 (cláusula where): Criteria cCliente = session.createCriteria(Cliente.class); cCliente.add(Restrictions.sqlRestriction("vNom e = 'Nécio'")); List <Cliente> clientes = cCliente.list(); for (Cliente c: clientes){ JOptionPane.showMessageDialog(null, c.getNome()); }
  • 14. Criteria API • Exemplo 3 (Funções agregadas): Criteria cCliente = session.createCriteria(Cliente.class); cCliente.setProjection(Projections.max("id")); int maxCod = (Integer) cCliente.uniqueResult(); JOptionPane.showMessageDialog(null, "Maior código registrado: " + maxCod);
  • 15. Boas Práticas • Uso de DAOs (Generic DAOs); • Patterns (padrões); – Session-per-request; • Uma sessão é aberta no inicio de uma requisição e fechada ao final; • Cuidado com os Anti-patters; – Session-per-operation • Uma sessão é aberta para cada operação executada;
  • 16. Exercício • A figura a seguir, mostra a estrutura de um banco de dados que está povoado; • Modele-o (idêntico à figura – inclusive os nomes dos campos e tabelas e principalmente com as devidas letras maiúsculas e minúsculas) e faça as consultas pedidas no slide seguinte;
  • 18. Consultas 1. Mostre todos os estados cadastrados na tabela estado. 2. Mostre a cidade cidade cujo código seja: 5658. 3. Mostre agora TODAS as cidades do Ceará; 4. Ordene a questão anterior pela descrição (ordem alfabética). 5. Ainda na tabela cidade, mostre as cidades que contenham a palavra Piauí na descrição. 6. Mostre o(s) bairro(s) da cidade de Buriti dos Lopes-PI. 7. Mostre a descrição e abreviatura dos bairros cujo CEP é 62300000. 8. Selecione todos os CEP’s das cidades do estado do PI. 9. Mostre os logradouros cujo CEP inicial com 642 e terminam com 220 (com as respectivas descrições das cidades e estados); 10. Conte quantas cidades existem no estado do Piauí; 11. Mostre o último logradouro inserido no banco de dados. 12. Mostre a quantidade de bairro do estado do Ceará.
  • 19. Referências • Material sobre Hibernate LES/PUC-Rio; • Jobson Ronan {jrjs@cin.ufpe.br} • Guilherme Kelly {gkmo@cin.ufpe.br} • Ely Júnior (ely_b_jr@hotmail.com)