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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Hibernate-consultas

1,253
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,253
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
17
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)