Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Persistência fácil de objetos com Hibernate, Notas de estudo de Informática

Persistência fácil de objetos com Hibernate

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 08/10/2009

madson-felipe-11
madson-felipe-11 🇧🇷

2 documentos

1 / 23

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
http://www.rsjug.org
http://www.usiinformatica.com.br
Persistência fácil de objetos com
Hibernate
Persistência de Objetos
O que é?
Por que mapeamento O/R?
Dificuldades Tradicionais do mapeamento O/R
Utilizando o Hibernate para o mapeamento O/R
Projetando a hierarquia de objetos e esquecendo o banco de dados
Persistindo seus objetos de dados
Persistindo objetos simples
Persistindo coleções
Boas práticas
Abstraindo a sua camada de persistência de dados
Consulta a dados
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17

Pré-visualização parcial do texto

Baixe Persistência fácil de objetos com Hibernate e outras Notas de estudo em PDF para Informática, somente na Docsity!

Persistência fácil de objetos com

Hibernate

● (^) Persistência de Objetos

  • (^) O que é?
  • (^) Por que mapeamento O/R?
  • (^) Dificuldades Tradicionais do mapeamento O/R ● (^) Utilizando o Hibernate para o mapeamento O/R ● (^) Projetando a hierarquia de objetos e esquecendo o banco de dados ● (^) Persistindo seus objetos de dados
  • (^) Persistindo objetos simples
  • (^) Persistindo coleções ● (^) Boas práticas
  • (^) Abstraindo a sua camada de persistência de dados ● (^) Consulta a dados

O que é persistir um objeto?

Uma aplicação java é composta de objetos

São utilizados objetos também para representar

os dados

Para que estes dados continuem existido entre

diferentes execuções da aplicação estes objetos

de dados precisam ser duráveis

Navegar na arvore de objetos é mais fácil do que

fazer uma consulta SQL na maioria das vezes

Dificuldades tradicionais no

mapeamento O/R

O modelo de representação dos dados em um

banco relacional não é compatível com a

representação direta de uma hierarquia de objetos

Os tipos de dados utilizados em uma linguagem

orientada a objetos não são os mesmos existentes

em um banco de dados

é necessário transformar os objetos para tabelas e

as tabelas para objetos novamente

Utilizando o Hibernate para o

mapeamento O/R

O Hibernate é uma ótima solução open source

para mapeamento Objeto Relacional, além de ser

a solução mais utilizada hoje em dia.

Ele trás uma grande Flexibilidade e poder para a

aplicação, contando com a linguagem de consulta

HQL e aceitando, em suas últimas versões, a

utilização de SQL mesclado a esta linguagem de

consultas

Persistindo Objetos Simples

● (^) Qualquer objeto persistido utilizando o Hibernate, precisa de um arquivo de mapeamento para o modelo relacional. ● (^) Todas as classes do pacote java.lang são equivalentes aos tipos de dados primitivos do banco de dados. ● (^) Todo objeto persistido pelo hibernate, precisa de uma propriedade de identificação, como a chave primaria do banco de dados.

Um ID para um Objeto?

● (^) um ID ou chave primaria, não tem relação nenhuma com a Orientação a objetos, mas é uma imposição do modelo relacional, onde os dados serão armazenados. ● (^) por este motivo, todo o tipo de dados persistido como uma entidade Objeto/Relacional, precisa prover esta identificação para possibilitar o mapeamento para o banco de dados ●

Tipos de Identificação:

  • (^) assigned/fornecida
  • (^) Gerada ● (^) native –- dependente do banco de dados ● (^) increment ● (^) sequence ● (^) hilo ● (^) seqhilo ● (^) uuid.hex ● (^) uuid.string ● (^) foreign

Tipos de dados personalizados

● (^) Além dos tipos de dados incluídos de fábrica, as vezes precisamos de um tipo composto, ou complexo, estes podem vir em quatro sabores:

  • (^) Component - é um objeto relacionado que é salvo na mesma tabela, transferindo para o banco de dados o conceito de composição.
  • (^) Enumeração - pode ser definido um tipo de dados que aceita apenas uma pequena quantidade de inteiros como valor, e os mapeia para um nome, para isto basta definir uma classe que extende net.sf.hibernate.PersistentEnum como tipo do campo.
  • (^) Tipo costumizado – podem ser definidos ou redefinidos quaisquer tipo de mapeamento de tipos de dados, para isto, basta sobre escrever as classes: ● (^) net.sf.hibernate.UserType ● (^) ou net.sf.hibernate.CompositeUserType
  • (^) Any Type – é uma propriedade equivalente a Object, que aceita qualquer entidade como valor.

Herança e persistência

● (^) Como uma boa engine de mapeamento O/R o hibernate trás suporte para herança e polimorfismo para consultas e persistência dos dados. ● (^) para que uma classe suporte polimorfismo no seu mapeamento deve ser utilizado o elemento: desta maneira o hibernate pode identificar novamente o tipo de dados daquela linha quando for ler novamente o objeto ali armazenado. ● (^) Durante uma consulta ou armazenamento de dados no entanto, o polimorfismo é automático, sem a necessidade de nenhuma sintaxe especial.

Persistindo um array

● Arrays de tipos Objeto ou

primitivo são suportados

pelo hibernate.

● Como no java, arrays são

ótimos para armazenar

quantidades não muito

grandes de dados, com

tamanho mais ou menos

fixo e de uma maneira

posicional.

<many-to-many column="FOO_ID" class="org.hibernate.Foo"/>

Persistindo um List

O contrato da interface

java.util.List, diz que

uma lista, é uma

coleção de objetos que

podem se repetir e

ficam armazenados de

maneira posicional.

<composite-element class="org.hibernate.car.CarComponent"> </composite-element>

Persistindo um BAG

● (^) O Collection framework do java, não tem uma interface Bag, mas a idéia desta coleção é bem parecida com um List. ● (^) O Bag é uma lista que pode conter elementos repetidos, mas diferente de uma List ela não mantem a ordem dos itens, tendo a vantagem de poder ser ordenada a vontade na hora de uma consulta. ● (^) ● (^) ● (^) ● (^)

Persistindo um Map

● (^) Muitas vezes, é útil salvar uma coleção de objetos na forma de um java.util.Map, desta forma podendo recuperar o valor destes objetos pelo valor da chave associada a ele. ● (^) Existem implementações que permitem uma chave duplicada, mas o hibernate só suporta chaves únicas em um Map. ● (^) ● (^) ● (^) ● (^) ● (^)

HQL – Hibernate Query Language

● (^) Para poder recuperar os dados utilizando o Hibernate, temos disponível a HQL. ● (^) Esta linguagem sendo um subset da OQL padronizada pela ODMG, misturada com recursos úteis do SQL, misturando o melhor dos dois mundos. ● (^) Na última versão do hibernate, é possível executar uma consulta SQL diretamente. ● (^) O Hibernate também trás uma interface para consultar orientada a objetos, chamada de Criteria API, esta mesmo sendo um casamento com o Hibernate, trás diversas vantagens e facilidades para o desenvolvimento.

Abstraindo sua camada de

persistência

● (^) Contrariando as regras da orientação a objetos, mas seguindo as boas práticas de desenvolvimento, mesmo utilizando o Hibernate como solução de mapeamento O/R, é recomendável a criação de um Layer de persistência em sua aplicação. ● (^) Esta camada também conhecida como Objetos de Acesso a Dados, ou DAOs, além de encapsular a utilização do Hibernate, permite também, a utilização mesclada do hibernate com JDBC puro, ou então, facilita a troca da solução de persistência, quando esta for necessária, como por exemplo, do Hibernate para o Prevayler ou para Entity Beans, ou até mesmo para apenas JDBC. ● (^) Estes objetos normalmente implementam as operações conhecidas como CRUD (Create, Retrieve, Update and Delete) normalmente oferecendo mais de um método de retrieve, ou consultas por exemplo (QBE), isto é, a passagem de um ou dois objetos do tipo a ser consultado, com as propriedades a serem utilizadas na consulta já preenchidas.