Você está na página 1de 30

Joo Alberto Neves dos Santos Filho joaonevesfilho@yahoo.com.

br
Military Institute of Engineering (IME/RJ) Systems Engineering Department (SE/9)

Sumrio

Introduo Arquitetura Mapeamento HQL/Criteria Aplicao Discusses avanadas

Introduo

Bancos de dados relacionais X Bancos de dados OO


Simplicidade, portabilidade, desempenho Flexibilidade, complexidade, confiabilidade Armazenamento esttico de dados (convencionais) Armazenamento de dados multimdia (desestruturados)

Anlise e projeto OO, armazenamento relacional

Modelos de dados dirigidos para modelos semnticos e extenses do prprio modelo relacional

Introduo

O Hibernate um framework de persistncia objeto/relacional para Java Persistncia

Propriedade de um objeto manter sua integridade ao longo do tempo

Todo framework de persistncia de objetos tem trs componentes principais:


Descrio do mapeamento entre o modelo de objetos em memria e seu correspondente em disco API para armazenamento e recuperao de objetos persistentes Linguagem de consulta que permite determinar o subconjunto dos objetos persistentes que devem ser trazidos para a memria

Vantagens

Desenvolvedor recupera, manipula e grava objetos num contexto orientado a objetos Minimiza linhas de cdigo Recuperao de objetos parte de uma premissa de navegao ao invs de pensar em joins de tabelas Colabora para um desenvolvimento mais rpido Classes podem ser reusadas num contexto de no-persistncia Minimiza o acesso ao banco de dados

Arquitetura

Arquitetura do Hibernate

Arquitetura

Arquitetura do Hibernate

Arquitetura

SessionFactory

Classe que mantm o mapeamento objeto relacional em memria Permite a criao de sesses (Session), por onde os dados so acessados

Session

Objeto que permite a comunicao entre a aplicao e a persistncia Contm uma conexo JDBC com o banco de dados

Arquitetura

Arquitetura do Hibernate

Arquitetura

Objetos persistentes

Objetos transientes

Objetos da aplicao cujo estado deve ser persistido pelo Hibernate Devem seguir o padro JavaBeans
Instncias de objetos persistentes fora do contexto de uma sesso Podem ser instanciados pela aplicao ou por uma sesso encerrada Representa uma unidade atmica (indivisvel) de uma operao de manipulao de dados Uma sesso pode conter diversas transaes, que so diretamente mapeadas em transaes JDBC

Transaction

Arquitetura

Ciclo de vida de objetos no Hibernate

Arquitetura

Arquitetura do Hibernate

Arquitetura

ConnectionFactory

Fbrica de conexes JDBC Fbrica de transaes JDBC

TransactionFactory

Mapeamento

Bancos de dados suportados

Mapeamento objeto/relacional definido em arquivos XML ou Annotations

Oracle, SQL-Server, DB2, PostgreSQL, MySQL, entre outros

O arquivo de mapeamento

Identifica as tabelas onde as classes so armazenadas

Indica as colunas onde os atributos e associaes so gravados e recuperados lido no incio da execuo da aplicao e armazenado em memria

HQL/Criteria

HQL (Hibernate Query Language) Linguagem de Consulta parecida com o SQL

SQL
Select * from CLIENTE

HQL
from + Cliente.class.getNa me();

Criteria
Criteria criteria = session.createCriteria (Cliente.class);

Manipula objetos e suas propriedades Resultado: colees de objetos Java Opo: uso de Criterias para montar estruturas de consultas atravs de chamadas de mtodos

Iniciando um Projeto

Fazer o download do Hibernate

Verso 3.0.5

Fazer o download do driver JDBC do SGBD Adicionar os arquivos do Hibernate ao classpath da sua aplicao (pasta lib do Hibernate): - dom4j-1.6.jar - antlr-2.7.5H3.jar - cglib-2.1.jar - asm.jar - jdbc2_0-stdext.jar - commons-collections2.1.1.jar

- ehcache-1.1.jar - jta.jar - xml-apis.jar - commons-logging-1.0.4.jar - asm-attrs.jar - log4j-1.2.9.jar

Iniciando um Projeto

Adicionar tambm ao classpath:

hibernate3.jar (pasta raiz do Hibernate) Driver JDBC do SGBD

Modelo de Objeto

Modelo do Banco de Dados

Cliente IdCliente Nome DataNascimento

Pedido IdPedido IdCliente (FK) Data Loja

ItemPedido IdItemPedido IdPedido (FK) Nome Valor Quantidade

Definio de Classe

Definio da Classe Cliente

//... public class Cliente { private Long id; private String nome; private Calendar dataNascimento;
private Set pedidos; //... construtor vazio e mtodos get/set }

Definio de Classe

Definio da Classe Pedido


//... public class Pedido { private Long id; private Calendar data; private String loja; private Cliente cliente;

private List itens; //... construtor vazio e mtodos get/set }

Definio de Classe

Definio da Classe ItemPedido

//... public class ItemPedido { private Long id; private String nome; private Double valor; private Integer quantidade; private Pedido pedido; //... construtor vazio e mtodos get/set }

Mapeamento das Classes


Mapeamento da Classe Cliente
<hibernate-mapping package="br.ime.hibernate.bean"> <class name="Cliente" table="Cliente" lazy="false"> <comment>Classe de Cliente</comment> <id name="id"> <generator class="native"/> </id> <property name="nome" not-null="true" length="30" column="nome"/> <property name="dataNascimento"/> <set name="pedidos" lazy="false" inverse="true"> <key column="cli_id"/> <one-to-many class="Pedido"/> </set> </class> </hibernate-mapping>

Mapeamento das Classes

Mapeamento da Classe Pedido

<hibernate-mapping package="br.ime.hibernate.bean"> <class name="Pedido" table="Pedido" lazy="false"> <comment>Classe de Pedido</comment> <id name="id"> <generator class="native"/> </id> <property name="data"/> <property name="loja"/> <many-to-one name="cliente" column="cli_id" not-null="true"/> <list name="itens" inverse="false" lazy="false"> <key column="ped_id"/> <list-index column="posicao" base="1"/> <one-to-many class="ItemPedido"/> </list> </class> </hibernate-mapping>

Mapeamento das Classes

Mapeamento da Classe ItemPedido

<hibernate-mapping package="br.ime.hibernate.bean"> <class name="ItemPedido" table="ItemPedido" lazy="false"> <comment>Classe de Itens do Pedido</comment> <id name="id"> <generator class="native"/> </id> <property name="nome"/> <property name="valor"/> <property name="quantidade"/> <many-to-one class="Pedido" name="pedido" column="ped_id" not-null="true"/> </class> </hibernate-mapping>

Banco de dados

Inserir na aplicao o arquivo hibernate.properties (indica qual arquivo de configurao ser utilizado)

path.configuracao = hibernate-postgresql.cfg.xml

Exemplos de configuraes de acordo com SGBDs distintos

hibernate-postgresql.cfg.xml hibernate-oracle.cfg.xml hibernate-mysql.cfg.xml

Classe utilitria InitSessionFactory para manipular sesses do hibernate e mapear as configuraes utilizadas

Exemplo de Aplicao

Exemplo de aplicao que cria objetos persistentes, inserindo-os no banco de dados

Ver aplicao no Eclipse

Referncias Bibliogrficas

Bauer, C, King G: Hibernate in action. Greenwich, 2005. Barros, M: Desenvolvimento web com Hibernate. Disponvel em: http://www.uniriotec.br/~marcio.barros/ DSW/11ProjetoHibernate.pdf. Acesso em 18/10/2005. Hibernate. Disponvel em: http://www.hibernate.org. Acesso em: 18/10/2005 Hibernate: Hibernate reference documentation version 3.0 Lozano, F: Persistindo com Hibernate. Java Magazine Edio 28, 2005.18-28. Umlauf, S, Filipini, C: Hibernate dicas e truques. Mundo Java Nmero 10, 2005. 32-42.

Discusses avanadas

Atributo inverse Lazy


One-To-Many Many-To-Many One-To-One Many-To-One Pattern Open Session in View: manipulao de referncias preguiosas quando a sesso j foi encerrada

Eager

Gerenciamento de sesses

EJB3/JPA, Annotations

Você também pode gostar