Escolar Documentos
Profissional Documentos
Cultura Documentos
Persistencia Usando Hibernate
Persistencia Usando Hibernate
Introdução
Hibernate é um Framewok para mapeamento Objeto/Relacional em Java
Possibilita desenvolver classes persistentes usando Java convencional:
Associação
Composição
Herança
Polimorfismo
e coleções Java
Implementa mecanismos de mapeamento:
Classes Java <-> Tabelas em SGBDs relacionais
Tipos Java <->Tipos SQL
Implementa mecanimos convenientes para consulta e recuperação de dados
Hibernate objetiva reduzir em cerca de 95% do tempo de desenvolvimento de tarefas relacionadas à persistência!
Visão Geral
A figura abaixo é uma descrição de alto nível da arquitetura do Hibernate
Exemplo:
import java.io.Serializable;
import java.util.Date;
public class Cliente implements Serializable {
private Long id;
private String nome;
private String endereco;
private String email;
private Date nascimento;
public Cliente(){
}
Os documentos de mapeamento podem ser gerados automaticamente a partir da base de dados ou das classes java
O elemento <class> mapeia uma classe a uma tabela
O elemento <id> um atributo da classe à chave-primária da tabela
O elemento <property> mapeia os demais atributos do objeto às colunas da tabela
Por fim, é necesário criar o arquivo de configuração do hibernate:
<!DOCTYPE hibernate-configuration PUBLIC"
-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLMyISAMDialect</property>
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/exemplo</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">r00Tp@$wd</property>
<mapping-resource="Cliente.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Mapeamento de Coleções
Hibernate persiste as seguintes coleções
java.util.Map
java.util.Set
java.util.SortedMap
java.util.SortedSet
java.util.List
e qualquer Array de objetos (ou valores) persistentes
Propriedades do tipo java.util.Collection e java.util.List podem ser persistidos como "bag"
Coleções são mapeadas usando os elementos <set>, <list>, <map>, <bag>, <array> e <primitive-array>
Uma tabela para a coleção é requirida quando ela contem valores ou referencias para outras entidades mapeadas em muitos-
para-muitos
Segue um exemplo de mapeamento para uma coleção de String
<set name="enderecos" table="ENDERECOS">
<key column="CLIENTE_ID"/>
<element column="endereco" type="string"/>
</set>
Mapeamento de Herança
O Hibernate suporta três estratégias de mapeamento de herança
Uma tabela por hierarquia de classes
Uma tabela por subclasse
Uma tabela por classe concreta (polimorfismo implicito)
Não é possível misturar as estratégias para um mesmo mapeamento de classe
Consultas
As consultas usando Hibernate podem ser feitas de três formas
Usando HQL (Hibernate Query Language)
Usando Criteria Queries
Usando SQL Nativo
Consultas HQL
A consulta acima retorna todos os objetos da classe pessoa e de suas subclasses que tenham o nome começado por MARIA
Possibilita descrever consultas polimorficas
Possibilita consultas sobre coleções
Query q = session.createQuery("from Pessoa pessoa where upper(pessoa.nome) like :NOME");
q.setProperties(nome);
List pessoas = q.list();
Criteria Queries
É uma API (bastante intuitiva) extendível para executar consultas
Para executá-la, basta criar um objeto Criteria e definir nele os critérios da consulta
Criteria consulta = sess.createCriteria(Pessoa.class);
consulta.add( Expression.like("nome", "Maria%") );
consulta.add( Expression.between("idade", 18, 40) );
List resultado = consulta.list();
A consulta acima vai retornar todas as Marias com idade entre 18 e 40 anos
Considerações
O Hibernate é um framework consolidado para fazer pessistência
Separa bem as coisas (o mundo OR do mundo OO)
O overhead é extremamente satisfatório
É mantido por uma comunidade muito ativa
O maior esforço para usá-lo está na construção e manutenção dos mapeamentos
Existem muitas ferramentas de apoio ao desenvolvimento usando Hibernate
XDoclets
Plugins para o Eclipse
Uso adequado destas ferramentas deixa apenas o trabalho estritamente necessário para o desenvolvedor
Recursos
Página Principal: http://www.hibernate.org
Documentação Oficial (em inglês): http://www.hibernate.org/hib_docs/reference/en/html/
Mapeamentos: http://www.j2eebrasil.com.br/jsp/tutoriais/tutorial.jsp?idTutorial=003_007
Coleções: http://www.j2eebrasil.com.br/jsp/tutoriais/tutorial.jsp?idTutorial=003_006
IDs: http://www.allapplabs.com/hibernate/hibernate_o_r_mapping_generator_element.htm
Apostila bacana: http://www.guj.com.br/content/articles/hibernate/intruducao_hibernate3_guj.pdf
POJO: http://en.wikipedia.org/wiki/Plain_Old_Java_Object
daca programa