A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Baixar versão 3.0.5 do hibernate em Hibernate Java avançado – PCC Jobson Ronan Guilherme Kely

Apresentações semelhantes


Apresentação em tema: "Baixar versão 3.0.5 do hibernate em Hibernate Java avançado – PCC Jobson Ronan Guilherme Kely"— Transcrição da apresentação:

1 Baixar versão do hibernate em Hibernate Java avançado – PCC Jobson Ronan Guilherme Kely

2 Baixar versão do hibernate em O que é?  Hibernate é uma moderna solução de mapeamento objeto-relacional(ORM)  Persistência transparente (POJO/Java Beans)  “Lazy Fetching”  Uso de uma Cache  Três estratégias para o mapeamento de heranças

3 Baixar versão do hibernate em O que é?

4 Baixar versão do hibernate em Pra que transparência?  Persistência sem impacto no código dos objetos de negócio  Qualquer classe pode ser uma classe persistente sem ser necessário implementar nenhuma classe ou interface  Classes persistentes podem ser usadas fora do contexto de persistência (ex Testes)  Total portabilidade sem dependências

5 Baixar versão do hibernate em Problemas dos BDRs  Modelagem  Não há polimorfismo  Não há herança  Lógica de negócio  Stored procedures -> perca de portabilidade

6 Baixar versão do hibernate em Vantagens dos RDBs  Trabalhar com grandes quantidades de dados  Busca, ordenação  Trabalhar com conjuntos de dados  Junções e agregações  Compartilhamento  Concorrência (Transações)  Muitas aplicações  Integridade  Restrições (Constraints)  Isolação de transações

7 Baixar versão do hibernate em  Obviamente, ainda precisamos dos RDBs

8 Baixar versão do hibernate em Objetivo  Aproveitar-se das vantagens oferecidas pelos RDBs  Isso sem perder a orientação a objetos

9 Baixar versão do hibernate em Objetivo Real  Ter menos trabalho  Ter um DBA feliz

10 Baixar versão do hibernate em Em prática  Locadora em partes...

11 Baixar versão do hibernate em Em prática  Classe Persistente  Construtor default  Pares de Get´s e Set´s  Uma propriedade identificadora package br.org.citi.pec.locadora; public class Filme { private int codigo; private String nome; public int getCodigo() { return codigo; } private void setCodigo(int codigo) { this.codigo = codigo; } public String getNome() { return nome; } private void setNome(int nome) { this.nome = nome; }

12 Baixar versão do hibernate em Em prática  Mapeamento XML  Metadado legível  Mapeamento de tabelas e colunas

13 Baixar versão do hibernate em Em prática  Salvando um objeto Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); Filme filme = new Filme(); filme.setNome(novoNome); session.save(filme); tx.commit(); session.close(); Também pode ser usado saveOrUpdate

14 Baixar versão do hibernate em Em prática  Carregando um objeto Session session = sessionFactory.openSession(); Filme filme = (Filme) session.load(Filme.class, new Integer(filmeId); session.close();  Não use load para determinar se um objeto existe (uma exceção é lançada neste caso)  Use get. Este retorna null caso o objeto não exista

15 Baixar versão do hibernate em Em prática  Removendo um objeto Session session = sessionFactory.openSession(); Transaction tx = s.beginTransaction(); Filme filme = (Filme) session.get(Filme.class, new Integer(filmeId); session.delete(filme); tx.commit(); session.close();

16 Baixar versão do hibernate em Em prática  Atualizando um objeto (Dirty Checking)  Obetendo um filme e alterando seu nome Session session = sessionFactory.openSession(); Transaction tx = s.beginTransaction(); Filme filme = (Filme) session.get(Filme.class, new Integer(filmeId); filme.setNome(novoNome); tx.commit(); session.close(); Não é necessário uma chamada explicita do update

17 Baixar versão do hibernate em Estado dos Objetos  Alguns conceitos sobre objetos  Transiente. Nunca persistido. Não associado a nenhuma sessão (Session)  Persistente Associado a uma única sessão  Desacoplado (Detached) Já persistido, mas não associado a nenhuma sessão

18 Baixar versão do hibernate em Estado dos Objetos  Dirty Checking só funciona em objetos persistentes  Use update para objetos desacoplados

19 Baixar versão do hibernate em Mais prática  Melhorando nosso modelo...

20 Baixar versão do hibernate em Mais prática  Classes persistentes package br.org.citi.pec.locadora; public class Cliente { private String login; private String CPF; private String nome; private Set locacoes = new Hashset(); //... Get´s e Set´s }

21 Baixar versão do hibernate em Mais prática package br.org.citi.pec.locadora; public class Locacao { private int id; private Filme filme; private Cliente cliente; private Date dataLocacao; private Date datadevolucao; //... Get´s e Set´s }  Classes persistentes

22 Baixar versão do hibernate em Mais prática  XML...

23 Baixar versão do hibernate em Mais prática  XML...

24 Baixar versão do hibernate em Mais prática  Persistência transitiva Locacao locacao = new Locacao(); Locacao.setDataLocacao(new Date()); Session session = sessionFactory.openSession(); Transaction tx = s.beginTransaction(); Filme filme = (Filme) session.get(Filme.class, new Integer(filmeId); Cliente cliente = (Cliente) session.get(Cliente.class, login); locacao.setCliente(cliente); locacao.setFilme(filme); cliente.getLocacoes().add(locacao); tx.commit(); session.close();

25 Baixar versão do hibernate em Herança  Estratégias para o mapeamento de herança  Uma tabela por hierarquia de classes  Uma tabela por subclasse  Uma tabela por classe concreta

26 Baixar versão do hibernate em Herança  Uma tabela por subclasse ... ...

27 Baixar versão do hibernate em Otimizando  Como as coleções são carregadas  Lazy fetching (Default)  Eager (Outer Join) fetching Indicado nos XML, ou na própria consulta

28 Baixar versão do hibernate em Lazy fetching Cliente cliente = (Cliente) session.get(Cliente.class, login); SELECT … FROM CLIENTES C WHERE C.LOGIN = ? Iterator cliente = cliente.getLocacoes().iterate(); SELECT … FROM LOCACOES L WHERE L.LOGIN_CLIENTE = ? Filme filme = locacao.getFilme(); SELECT … FROM FILMES F WHERE F.FILME_ID = ?  SQL escondido:

29 Baixar versão do hibernate em Outer join fetching  SQL escondido: Cliente cliente = (Cliente) session.get(Cliente.class, login); SELECT … FROM CLIENTES C LEFT OUTER JOIN LOCACOES L ON L.LOGIN_CLIENTE = C.LOGIN LEFT OUTER JOIN FILME F ON L.FILME_ID = F.FILME_ID WHERE C.LOGIN = ?

30 Baixar versão do hibernate em Otimizando  Como otimizar?  Minimizando a leitura de linhas das tabelas  Minimizando a quantidade de comandos SQLs enviados

31 Baixar versão do hibernate em Otimizando  Minimizando a leitura de linhas das tabelas  Usar lazy fecthing  Minimizando a quantidade de comandos SQLs enviados  Usar outer join fetching

32 Baixar versão do hibernate em Otimizando  Problemas  Usar lazy fecthing Problema dos n+1 selects (muitos selects!)  Usar outer join fetching Problema do produto cartesiano (grandes conjuntos de dados)

33 Baixar versão do hibernate em Otimizando  Solucionando problemas de otimização  Stratégia de Fecthing definida em tempo de execução  Batch Fecthing  Utilizar um cache de segundo nível

34 Baixar versão do hibernate em Consultas  HIbernate Query Lanuage  Permite que se expresse quase tudo o que se precisa expressar em SQL, porém mais orientado a objetos  Três maneiras de se fazer consultas no Hibernate  HQL  Criteria  SQL nativo

35 Baixar versão do hibernate em HQL  Tornar SQL orientado a objetos  Classes e propriedades ao invés de Tabelas e colunas  Polimorfismo  Associações  Total suporte a operações relacionais  Joins  Projeções  Funções agregadas e agrupamento  Ordenação  SubQueries  Chamadas a funções SQL

36 Baixar versão do hibernate em HQL  A consulta mais simples possivel HQL from Filme  Devolva todos os filmes List filmes = session.createQuery(“from Filme”).list();  As consultas podem ser paginadas Query query = session.createQuery(“from Filme”); query.setFirstResult(20); query.setMaxResults(30); List filmes = query.list();

37 Baixar versão do hibernate em HQL  Uma consulta com ordenação from Locacao l order by l.dataLocacao desc  Caso esteja interessado em um único resultado Query query = session.createQuery( “from Locacao l order by l.dataLocacao desc”); Locacao locacao = query.uniqueResult();

38 Baixar versão do hibernate em HQL  Uma consulta com joins select c from Cliente c left join [fetch] c.locacaoes l where l.dataLocacao > 3/5/2005  Todos os clientes com suas locações efetuadas após o dia 3  Definição da estratégia de fetching  Com o fetch: Coleções já inicializadas  Sem o fetch: lazy collections

39 Baixar versão do hibernate em HQL  HQL suporta os mesmos operadores que 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

40 Baixar versão do hibernate em HQL  Projeções + funções agregadas (Report Queries) select c.nome, count(l) from Cliente c, c.locacoes l where l.dataLocacao between(:inicio, :fim) group by c.nome order by count(l)

41 Baixar versão do hibernate em HQL  Os dados da consulta anterior serão retornados em List de Object[]  Consulta comum para a realização de relatórios  Podemos tornar o processo mais elegante List list = session.createQuery( “select new ClienteReportRow(c.nome, count(l)) ” + “from Cliente c, c.locacoes l ” + “where l.dataLocacao between(:inicio, :fim) ” + “group by c.nome ” + “order by count(l)”). setDate(“inicion”, inicio). setDate(“fim”, fim).list();

42 Baixar versão do hibernate em HQL  Dessa forma evitas-se o uso de vetores de objetos  É necessário que exista uma classe e um construtor previamente definido

43 Baixar versão do hibernate em HQL  Consultas não precisam aparecer no código  Na verdade, muitas vezes é melhor que não apareçam  Podem ficar nos metadados e serem chamadas pelo nome  Usa-se o método getNamedQuery()  Mas antes, ela precisa ser declarada em algum arquivo de mapeamento List clientes = session.getNamedQuery(“findClienteByName”).setString(“nome”, nome),list()

44 Baixar versão do hibernate em Modelagem OO  “Mais classes que tabelas”  Classse Endereco Propriedade: rua, numero, bairro...  Rua, numero, bairro,... Colunas da tabela cliente … …

45 Baixar versão do hibernate em O que mais?  Hibernate também dá suporte a tipos de dados definidos pelo usuário  Interceptadores e EventListeners  Filtros  Definições explicitas dos SQLs de insert e update e load (hibernate 3)...e mais um pouco!

46 Baixar versão do hibernate em Sobre configuração  Como obter um SessionFactory?  Programaticamente  Por arquivo XML

47 Baixar versão do hibernate em Configuração programática Configuration cfg = new Configuration().setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect")..setProperty("hibernate.connection.driver_class", "org.hsqldb.jdbcDriver").setProperty("hibernate.connection.url", "jdbc:hsqldb:file:hsqldb/data").setProperty("hibernate.connection.username", "sa").setProperty("hibernate.connection.password", "").addClass(Filme.class).addClass(Cliente.class).addClass(Locacao.class); SessionFactory sessionFactory = cfg.buildSessionFactory();

48 Baixar versão do hibernate em Configuração XML org.hibernate.dialect.MySQLDialect org.gjt.mm.mysql.Driver root ftBBvEdiC jdbc:mysql://localhost/lockar hibernate.cfg.xml Configuration cfg = new Configuration().configure(); SessionFactory sessionFactory = cfg.buildSessionFactory();

49 Baixar versão do hibernate em Extras  Hbm2ddl (tool)  Gera o schema do BD a partir das XML de mapeamentos  Usado por linha de comando ou pelo ant

50 Baixar versão do hibernate em Exercícios  Ampliar nosso modelo

51 Baixar versão do hibernate em Exercícios  Crie as classes (JavaBeans/POJO)  Crie os XML de mapeamentos  Implemente as consultas  Todos os filmes locados durante um determinado mês  Listagem contendo nome do filme, média das avaliações, e total de comentários para todos os filmes  Listagem contendo nome do filme mais o número de cópias de VHS e de DVD desse filme  Listagem contendo nome do filme mais o número de cópias de VHS e de DVD desse filme locadas em um determinado mês  Todos os clientes que locaram mais de 5 VHS no ultimo mês (Com as devidas locações carregadas)

52 Baixar versão do hibernate em Exercício 2  Re-implemetar as classes de repositório do projeto usando o hibernate


Carregar ppt "Baixar versão 3.0.5 do hibernate em Hibernate Java avançado – PCC Jobson Ronan Guilherme Kely"

Apresentações semelhantes


Anúncios Google