Carregar apresentação
A apresentação está carregando. Por favor, espere
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.