Hibernate
Apresentação
Sidney Vilaça
Tópicos
Conceitos básicos: banco de dados(b.d),
orientação a objetos(o.o.) ...
Persistência de dados e persistência de objetos
e mapeamento O/R.
O que é o Hibenate?
Exemplo do Hibernate.
Persistência de dados em Hibernate.
Banco de Dados
Bancos de dados (ou bases de dados) são arquivos ou
sistemas com uma estrutura regular que organizam
informações.
Um Banco de Dados Relacional é um sistema de
armazenamento de dados baseado nos relacionamentos
entre elementos de dados buscando uma normalização
(sem redundâncias) dos dados.
Persistência de Dados
A Persistência de Dados consiste no
armazenamento confiável e coerente das
informações em um sistema de armazenamento
de dados.
Persistência de Objetos
A Persistência de Objetos é o armazenamento
consistente de objetos de uma aplicação o.o. para que
estes objetos existam em diferentes execuções de
diferentes aplicações.
O.O. + B.D. , quadro atual
Problema: Temos um aplicativo o.o. que precisa
interagir com um banco de dados. O que fazer?
Os bancos de dados o.o. ainda têm grandes
desvantagens em relação aos relacionais.
O padrão vigente nas empresas é o banco de dados
relacional, e sem uma perspectivas de mudança.
Mapeamento OR, a solução
O Mapeamento Objeto-Relacional (OR) é a solução para
o problema.
O Mapeamento OR é uma técnica de desenvolvimento
que consiste em representar o objeto de maneira
relacional na gravação do banco de dados, e consegue
fazer o caminho inverso sem perder informação.
Mapeamento OR, como?
O mapeamento OR tem 3 componentes
Modelo Orientado a objetos, que é o modelo em que
os dados estão representados na aplicação,
Persistência Física, o modelo relacional em que os
dados serão armazenados.
Persistência Lógica, que traduz o modelo o.o. para a
maneira que eles serão armazenados na persistência
física, e vice-versa.
Hibernate
O Hibernate é uma das soluções mais difundidas para
Mapeamento OR em Java. (Outras também famosas
são OJB, JDO e o Toplink).
Ele está sob a LGPL, ou seja, ele pode ser um usado
em código aberto e projetos comerciais.
Usam o Hibernate em seus projetos: Sony, AT&T, PwC,
Cisco... entre outras empresas.
Mapeamento OR em Hibernate
O hibernate isola o aplicativo de contato direto com o
banco de dados, servindo como ponte entre os dois
sistemas. E a melhor parte é que não possui chamadas
SQL misturadas ao código Java
Ao contrário de outros modelos de mapeamento OR, o
hibernate não é intrusivo. Ou seja, ele não obriga o
programado a estender uma classe dele no seu
aplicativo.
Mapeamento OR em Hibernate
No Hibernate temos que criar um arquivo de mapeamento
que serve como o modelo da persistência lógica.
Nele a classe o.o. é descrita de maneira pré-determinada
pelo Hibernate, e assim ele monta um b.d. relacional
consistente para aquela estrutura o.o.
E o arquivo de mapeamento é utilizado para os padrões
de escrita e consulta.
Persistência de Dados
em Hibernate
Podemos dividir a persitência de dados do
Hibernate em dois tipos:
Persistência
de objetos simples
Persistência
de coleções
Vantagens
Todo objeto a ser persistido pelo Hibernate precisa ter
um campo ID, ou chave primária.
Apesar de desnecessário no aplicativo, este campo ID
irá dar a unicidade do objeto no banco de dados, e irá
garantir a sua persistência.
Persistência de Dados:
Objetos Simples
Objetos que podem ser persistidos:
Todos os tipos primitivos de java
Os objetos gerados pelas classes do pacote
java.lang (equivalência a tipos primitivos do B.D.)
As
classes: java.util.Calendar, java.util.Date,
java.sql.Date, java.sql.Time, java.sql.Timestamp.
Persistência de Dados:
Objetos Simples
...
As
classes: java.util.Calendar, java.util.Date,
java.sql.Date, java.sql.Time,
java.sql.Timestamp.
E
todas as classes declaradas como
persistentes, elas serão iguais á uma chave
estrangeira em um B.D. relacional
Persistência de Dados:
Objetos Simples, exemplo
Classe
public class
private
private
private
CD {
String nome;
String artista;
java.util.Date lancamento;
public CD() {
}
public String getNome(){
return ID;
}
public void setNome(int nome){
this.nome = nome;
}
// Sets e Gets
public java.util.Date getNascimento(){
return nascimento;
}
public void setNascimento(java.util.Date lancamento) {
this.lancamento = lancamento;
}
Persistência de Dados:
Objetos Simples, exemplo
Arquivo de mapeamento da classe (CD.hbm.xml)
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernatemapping.dtd">
<hibernate-mapping>
<class name="Amigo" table="amigo">
<id name="nome" column="nome" type="string">
<generator class="assigned"/>
</id>
<property name="artista" type="string"/>
<property name="lancamento" type="date"/>
</class>
</hibernate-mapping>
Persistência de Dados:
Coleções
Apesar de mapear coleções, cada coleção
é mapeada de maneira diferente. Vamos
ver como persistir um array e um map.
Persistência de Dados:
Coleções: Array
<array name="teste"
table="Teste"
cascade="all">
<key column="teste_ID"/>
<index column="I"/>
<many-to-many
column="teste_ID"
class="org.hibernate.Foo"/>
</array>
Persistência de Dados:
Coleções: Map
<map name="holidays"
table="holidays" schema="dbo"
order-by="hol_name asc">
<key column="id"/>
<index column="hol_name"
type="string"/>
<element column="hol_date"
type="date"/>
</map>
HQL
Hibernate Query Language
Para fazer consultas ao banco o Hibernate usa HQL,
que apesar do nome, é inteiramente orientado a objetos,
entendendo noções como herança e polimorfismo.
Ex:
select nome
from eg.CD as cd
join cd.nome as "Ventura"
Persistência de Heranças
Existem 3 estratégias para mapeamento de heranças:
Por
Hierarquia
Por
Subclasse
Por
Classe Concreta
Referências
Home Page do Hibernate:
http://www.hibernate.org
Tutorial
http://www.roseindia.net/hibernate/index.shtml
Mapeamento OR
http://en.wikipedia.org/wiki/Object-relational_mapping
FIM