Your SlideShare is downloading. ×
  • Like
Hibernate-consultas
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply
Published

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,209
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
15
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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 wherevNome like ?").setString(0, "%").list();for (Cliente c: clientes){ JOptionPane.showMessageDialog(null, c.getNome());}Note que agora não especificamos oidentificador 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;
  • 17. DDL - Endereços
  • 18. Consultas1. 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)