Hibernate Mapeamento O/R.

Slides:



Advertisements
Apresentações semelhantes
Java Avançado Luiz Carlos d´Oleron SJCP Hibernate II.
Advertisements

I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
Banco de Dados I Aula 20.
Projeto 1.
Prof.: Bruno Rafael de Oliveira Rodrigues
Prof.: Bruno Rafael de Oliveira Rodrigues
Maurício Edgar Stivanello
Persistência de objetos em arquivo texto usando Java
Desenvolvimento Baseado em CGI Material cedido pelo Prof
Mapeamento Objeto Relacional
Projeto de Sistema Orientado a Objeto
1 Hibernate Introdução Caio Nakashima
Caio Nakashima Hibernate Associação Caio Nakashima
Hibernate Apresentação
Ferramentas e Tecnologias II
Introdução a JDBC Eduardo Martins Guerra Instituto Tecnológico de Aeronáutica Curso de Pós-Graduação em Engenharia de Software Programação Distribuída.
Java Persistence Architecture
Classes e objetos P. O. O. Prof. Grace.
B ANCO DE D ADOS E JDBC Profa. Msc. Cintia Carvalho Oliveira Mestre em Ciência da Computação – UFU Bacharel em Ciência da Computação - UFJF 1.
Análise de Sistemas Análise e Projeto Prof. Jeime Nunes Site:
Hibernate com JPA Prática
SQL Server 2012 Introdução a Modelagem de Dados
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
DESENVOLVENDO APLICAÇÕES JAVA PARA WEB UTILIZANDO OS FRAMEWORKS STRUTS 2 E HIBERNATE Alexandre Oliveira.
Ferramentas para Orientação a Objetos Apresentação da Disciplina Prof. Wolley.
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Web Services Uninorte Semana de Tecnologia da Informação
Integração com Banco de Dados
Hibernate: Consultas Francisco do Nascimento
Design Patterns / Acesso ao banco de dados (java.sql)
JSP / Servlets Avançado
Prof. Kelly E. Medeiros Bacharel em Sistemas de Informação
Introdução ao Hibernate
Hibernate Java avançado – PCC Jobson Ronan
Hibernate Java avançado – PCC Jobson Ronan
Banco de Dados Parte 04 Ceça. Ceça Moraes 2 Conteúdo  Os três níveis da arquitetura  Mapeamentos  Arquitetura cliente-servidor.
Banco de dados.
Hibernate Mapeamento Objeto-Relacional
Arquitetura de Desenvolvimento Web MVC vs. Three Tiers
Configuração do Ambiente de programação
Implementação MVC Pedro Antonino.
Banco de Dados Aplicado ao Desenvolvimento de Software
Campus de Caraguatatuba Aula 2: Introdução a Tecnologia de BD
Programação para Web Unidade 06 – Java Beans e BDs Prof.: Henrique Santos.
Projeto de Sistemas de Informação Prof. Schneider Oracle Object-Relational.
SQLite Banco de Dados II.
Persistência e mapeamento objeto relacional
Ultimos recursos Jobson Ronan
Hibernate – Introdução rápida Jobson Ronan
MAKE: UM FRAMEWORK PARA GERAÇÃO DE DADOS PARA TESTES UNITÁRIOS EM JAVA Guilherme Braga Viana BahiaAluno: Orientador:Prof. Joaquim Pedro C. de Oliveira,
April 05 Prof. Ismael H. F. Santos - 1 Módulo IV Hibernate Prof. Ismael H F Santos.
Tarciane Andrade Análise de Casos de Uso Tarciane Andrade
Hibernate: Relacionamentos e Herança
Modelo de Análise e Projeto
Hibernate Universidade Federal do Rio Grande do Sul Instituto de Informática Web e Sistemas de Informação (2004/2005) Objetos Distribuídos Prof. Dr. Cláudio.
Nilson de Souza Rego Jr.1 Persistência de Dados em.
UCSal – Bacharelado em Informática
Módulo II Capítulo 1: Orientação a Objetos
Leo Silva Leonardo Murta Luiz Viana Persistência em Java.
Hibernate – componentes, herança, e associações Jobson Ronan
Módulo II Capítulo 4: Primeiro Programa Completo no Console William Ivanski Curso de Programação C#
Programação para Web I AULA 2 BANCO DE DADOS.
Desenvolvimento WEB II Professora: Kelly de Paula Cunha.
Banco de Dados -Aprendendo conceitos -Usando o SQL Conf para:
CIn-UFPE1 Projeto de Gerenciamento de Dados. CIn-UFPE2 Objetivos n Definir o que significa gerenciamento de dados do sistema; n Entender abordagens diferentes.
Persistência de dados e padrão DAO
Programação para Internet Aula 11 SQL (Introdução a linguagem, comandos de modificação: Create, Drop, Alter, Insert, Delete, Update)
Persistência de dados e padrão DAO Padrões de Projeto Orientado a Objetos Profa. Danielle Martin/Mauricio Universidade de Mogi das Cruzes.
Prof.: Jean Carlo Mendes
Transcrição da apresentação:

Hibernate Mapeamento O/R

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

Hibernate - Arquitetura

Arquitetura - Overview © LES/PUC-Rio

Hibernate – Classes Persistentes

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

POJO - Exemplo © LES/PUC-Rio

POJO - Exemplo mapeamento © LES/PUC-Rio

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

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

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 http://www.w3schools.com/xml/ http://www.w3.org/XML/ © LES/PUC-Rio

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Tabela por subclasse © LES/PUC-Rio

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

Tabela por classe concreta © LES/PUC-Rio

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

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

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

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

Arquitetura Detalhada © LES/PUC-Rio

Arquitetura Detalhada © LES/PUC-Rio

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

Arquitetura Detalhada © LES/PUC-Rio

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

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

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

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

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

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

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

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

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

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

HQL © LES/PUC-Rio

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

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

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

Alterando objetos persistentes © LES/PUC-Rio

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

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

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

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

Exercícios Trabalhar a “auto-didática” Referência do Hibernate bastante completa: http://www.hibernate.org http://www.hibernate.org/hib_docs/v3/reference/en/html/ 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