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

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

Hibernate Mapeamento O/R.

Apresentações semelhantes


Apresentação em tema: "Hibernate Mapeamento O/R."— Transcrição da apresentação:

1 Hibernate Mapeamento O/R

2 Hibernate – O que é? Ferramenta para mapeamento O/R em Java
Uma das mais difundidas Separação entre a aplicação e o acesso ao banco Facilidade de uso Controle de transações Independência quanto ao tipo de base de dados Consulta de dados HQL Criteria Queries Licença LGPL © LES/PUC-Rio

3 Hibernate - Arquitetura

4 Arquitetura - Overview
© LES/PUC-Rio

5 Hibernate – Classes Persistentes

6 Classes Persistentes Implementam entidades lógica do negócio
POJOs (Plain Old Java Object) Construtor padrão Possui métodos de acesso – gets/sets (opcional) Possui um atributo identificador (opcional) Classes não final (recomendado) © LES/PUC-Rio

7 POJO - Exemplo © LES/PUC-Rio

8 POJO - Exemplo mapeamento © LES/PUC-Rio

9 Mapeamento Devemos informar ao Hibernate como relacionar o modelo de objetos com o modelo relacional Arquivos de mapeamento Descrevem como são feitos os mapeamentos © LES/PUC-Rio

10 Arquivo de Mapeamento Arquivo XML Declaração de DTD
Útil para auto-completion Declaração das classes Usualmente possuem extensão .hbm.xml Comunidade.hbm.xml © LES/PUC-Rio

11 XML Recomendação da W3C para gerar linguagens de marcação para necessidades especiais Separação do conteúdo e da formatação Legibilidade tanto por humanos quanto por máquinas Possibilidade de criação de tags sem limitação Criação de arquivos para validação de estrutura Com seu uso pode-se interligar bancos de dados distintos Simplicidade Referencias © LES/PUC-Rio

12 Arquivo de Mapeamento – Ex POJO
Declaração de classe usando o elemento class Indicação do nome da classe Indicação do nome da Tabela (opcional) © LES/PUC-Rio

13 Mapeamento de Identificadores
Indicação da chave primária nome do atributo tipo Escolha do gerador da Chave ver classe © LES/PUC-Rio

14 Tipos de Geradores de Chave
increment identity sequence hilo seqhilo uuid guid native assigned select foreign © LES/PUC-Rio

15 Mapeamento de Propriedades
Elemento property Indicação de nome e tipo Se não explicitar coluna considera o nome da propriedade ver classe © LES/PUC-Rio

16 Mapeamento de Propriedades
Tipos nomes de tipos básicos do Hibernate (integer, string, character, date, timestamp, float, binary, serializable, object, blob). nome de tipos básicos Java (int, float, char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob, java.util.Calendar). nome de uma classe Java Serializable. Se não especificado o Hibernate usa reflexão Outras propriedades Access (property | field): controla como o Hibernate vai acessar os atributos em tempo de execução (default: property) column: nome da coluna na tabela do banco (default: nome do atributo) not-null (true | false): determina se a propriedade pode ser nula (default: false) © LES/PUC-Rio

17 Mapeamento de Relacionamentos
one-to-one many-to-one one-to-many many-to-many © LES/PUC-Rio

18 Mapeamento de Relacionamentos - Exemplo
Unidirecional one-to-many Bidirecional many-to-many Unidirecional many-to-one Unidirecional many-to-one © LES/PUC-Rio

19 Mapeamento – many-to-one
name class column © LES/PUC-Rio

20 Modelo relacional comunidades atores id <<PK>>
nome descricao atorID <<FK>> id <<PK>> nome nascimento © LES/PUC-Rio

21 Mapeamento – one-to-one
© LES/PUC-Rio

22 Modelo relacional cadastros atores id <<PK>> email
username senha id <<FK>> nome nascimento © LES/PUC-Rio

23 Mapeamento – uso de Coleções
java.util.Set, java.util.Collection, java.util.List, java.util.Map, java.util.SortedSet, java.util.SortedMap... © LES/PUC-Rio

24 Modelo relacional papeis comunidades id <<PK>>
nome descricao comunidadeID <<FK>> id <<PK>> nome descricao atorID <<FK>> © LES/PUC-Rio

25 Mapeamento – List – many-to-many
© LES/PUC-Rio

26 Mapeamento – many-to-many
© LES/PUC-Rio

27 Modelo relacional papeis atores ator_papel id <<PK>> nome
descricao comunidadeID <<FK>> id <<PK>> nome nascimento atorID <<FK>> papelID <<FK>> © LES/PUC-Rio

28 Mapeamento - Herança Estratégia de estrutura genérica não utilizada
Três estratégias Tabela por hierarquia Tabela por subclasse Tabela por classe concreta Recurso Polimorfismo implícito © LES/PUC-Rio

29 Tabela por hierarquia Precisa determinar um discriminator
© LES/PUC-Rio

30 Modelo relacional Ator id <<PK>> nome nascimento escola
ano ocupacao salario TIPO_DE_ATOR © LES/PUC-Rio

31 Tabela por subclasse © LES/PUC-Rio

32 Modelo relacional Estudante Ator Trabalhador atorID <<FK>>
escola ano id <<PK>> nome nascimento atorID <<FK>> ocupacao salario © LES/PUC-Rio

33 Tabela por classe concreta
© LES/PUC-Rio

34 Modelo relacional Trabalhador Estudante id <<PK>>
nome nascimento ocupacao salario id <<PK>> nome nascimento escola ano © LES/PUC-Rio

35 Tabela por classe concreta – polimorfismo implicito
© LES/PUC-Rio

36 Configuração hibernate.properties ou hibernate.cfg.xml
Driver, localização do banco, senha, mapeamentos, etc. © LES/PUC-Rio

37 Resultado Um arquivo de mapeamento por classe persistente
Um arquivo de configuração © LES/PUC-Rio

38 Arquitetura Detalhada
© LES/PUC-Rio

39 Arquitetura Detalhada
© LES/PUC-Rio

40 SessionFactory (org.hibernate.SessionFactory)
Threadsafe Montada a partir do arquivo de configuração (hibernate.cfg.xml) Fábrica de Session Geralmente se usa uma por aplicação © LES/PUC-Rio

41 Arquitetura Detalhada
© LES/PUC-Rio

42 Session (org.hibernate.Session)
Representa a troca de informações entre a aplicação e um esquema de armazenamento de dados Fábrica de transações Wrapper para conexões JDBC Cache de objetos persistentes © LES/PUC-Rio

43 Aplicação Exemplo Uma aplicação onde é possível Manter atores
Cadastrar novos Editar existentes Manter Comunidades Cadastrar novas Adicionar novos papeis Gerenciar Papeis Consultar atores Consultar Comunidades Modelo © LES/PUC-Rio

44 Copiar bibliotecas Copiar as bibliotecas necessárias para o funcionamento do hibernate © LES/PUC-Rio

45 Criando o banco Configuration SchemaExport
Busca o arquivo hibernate.cfg.xml no classpath SchemaExport Classe usada para criar o esquema do banco de dados É necessário a existência de um banco com o nome especificado na configuração © LES/PUC-Rio

46 Trabalhando com classes persistentes
SessionFactory hibernate.cfg.xml Configuration cria save Session BANCO P1 A1 C1 delete P2 © LES/PUC-Rio

47 Criando uma Session Criando uma SessionFactory Criando uma Session
© LES/PUC-Rio

48 Demarcação de transação
Fronteiras de transação são obrigatórias Envolve 4 passos básicos iniciar transação dar o commit na transação tratar erros fechar sessão © LES/PUC-Rio

49 Tornando um objeto persistente
Novas instancia são consideradas transientes Usa-se o comando save para tornar um objeto persistente Ao salvar o seu id é gerado Se o objeto contiver associação com outros objetos é preciso salva-los antes (ou usar cascade) © LES/PUC-Rio

50 Carregando um objeto Pode usar dois comandos load Get Lança exceção
Retorna nulo © LES/PUC-Rio

51 Consultando objetos HQL Criteria SQL
Linguagem de consulta orientada a objeto Criteria Uma API orientada a objeto para busca SQL © LES/PUC-Rio

52 HQL © LES/PUC-Rio

53 Paginação Usado para determinar fronteiras no resultado
Útil para evitar desperdício de memória. Ex.: Google © LES/PUC-Rio

54 Externalizando queries
Queries são declaradas nos mapeamentos Não mistura código de consulta com o da aplicação © LES/PUC-Rio

55 Criteria API Mais próximo de desenvolvedores que não conhecem linguagens de consulta © LES/PUC-Rio

56 Alterando objetos persistentes
© LES/PUC-Rio

57 Tornando os objetos transientes
Remove o objeto do banco Cuidado para não resultar em violação de integridade Exemplo: ao remover um ator seu cadastro deve ser removido também © LES/PUC-Rio

58 Persistência transitiva
As operações (save, delete, update) realizadas com o banco podem resultar em perda de integridade O Hibernate possui mecanismos para tratar relações do tipo pai/filho automaticamente Ex.: Ao remover um ator do banco não faz sentido manter o cadastro do ator © LES/PUC-Rio

59 Carga preguiçosa Carga dos objetos é feita apenas quando necessário
Evita sobrecarregar a memória com objetos não necessários Hibernate usa proxies das coleções Java Pode ser difícil de se trabalhar (LazyInitializationException) © LES/PUC-Rio

60 Boas práticas e padrões
Uso de DAOs (Generic DAOs) Patterns Session-per-request Uma sessão é aberta no inicio de uma requisição e fechada ao final Implementada com ServletFilter Anti-patters Session-per-operation Uma sessão é aberta para cada operação executada © LES/PUC-Rio

61 Exercícios Trabalhar a “auto-didática”
Referência do Hibernate bastante completa: Suponha uma aplicação para fazer o controle de gastos. Nela seria possível cadastrar entradas de credito ou débito que determinado indivíduo realizou. Cada entrada possui um valor, uma data e uma categoria. Deve ser possível Registrar categorias Verificar quanto foi gasto em determinada categoria em determinado intervalo de tempo Verificar qual foi a percentagem que determinada categoria gastou em determinado intervalo de tempo Não se preocupe com Interface Controle de usuários © LES/PUC-Rio


Carregar ppt "Hibernate Mapeamento O/R."

Apresentações semelhantes


Anúncios Google