Escolar Documentos
Profissional Documentos
Cultura Documentos
Mapeamento Objeto-Relacional
Objetivos
Aprender MOR usando Hibernate
Configurar o Hibernate (XML, Anotaes)
Aprender a preparar consultas e comandos
Mapeamento Objeto
Relacional
banco de dados
de uma tabela;
Deve-se considerar:
Tipos de dados;
Comprimento mximo dos dados;
Preciso.
Exemplo MOR
MOR: Mapeamento de
relacionamentos
Tipos:
Um-para-um;
Um-para-muitos;
Muitos-para-um;
Muitos-para-muitos.
MOR: Opes
JDBC:
Ferramentas Existentes:
Hibernate;
JDO;
Ibatis;
Castor;
Torque;
EJB/CMP;
JPA (EJB 3.0)
Hibernate
Framework de mapeamento objeto
de negcio;
Manuteno
Menos linhas de cdigo (sistema mais
compreensvel)
Desempenho
Hibernate permite otimizaes
Independncia de fornecedor
Abstrai o aplicativo do sistema de banco de
dados
Portabilidade
Hibernate - Arquitetura
10
Hibernate - Arquitetura
Session:
Possibilita a comunicao entre a aplicao e
a persistncia;
Objetos leves (barata de criar e destruir);
De vida curta;
A partir dele possvel:
Realizar operaes CRUD:
11
Hibernate - Arquitetura
SessionFactory:
Possui informaes de um banco de dados;
Fbrica de objetos do tipo Session;
Objeto Pesado;
Uma nica instncia por aplicao;
Mltiplos bancos de dados (Uma SessionFactory
para cada)
Mantm o MOR em memria.
12
Hibernate - Arquitetura
Configuration:
Usado para configurar informaes para
inicializao do Hibernate;
SessionFactory:
13
Hibernate - Arquitetura
Transaction (opcional):
Objeto de vida curta;
Usados para especificar unidades atmicas
de trabalho;
Abstrai o aplicativo de lidar diretamente com
transaes JDBC, JTA ou CORBA.
14
Hibernate - Arquitetura
Interfaces Criteria e Query
Query:
Executar consultas no banco de dados
Controlar como a consulta executada
Criteria:
Bem similar a Query
Permite executar e criar consultas com criterios
orientados para objetos
15
Classes Persistentes
Implementam as entidades de domnio do
negcio;
Associadas a uma tabela no banco de
dados;
Classes POJOs (Plain Old Java Objects):
Estrutura de JavaBeans
Construtor padro;
Mtodos getters e setters;
Com atributo identificador independente da lgica
de negcio.
16
Ciclo de Vida
17
Objetos Persistentes
Possuem uma identidade de banco de
dados;
Estado do objeto continua existindo aps a
destruio do seu processo;
Pode ser recriado em um novo objeto.
18
Objetos Transientes
Tempo de vida ligado ao tempo do processo
que o criou;
No necessariamente possuem estado
persistente;
No podem ser reconstitudos
automaticamente.
19
Objetos Detached
Objetos em estado intermedirio;
J Foram associados a um contexto
persistente;
Perderam o contexto
20
Chave Primria
Uma chave candidata a ser primria uma
21
22
23
O que so?
24
Primeiro Exemplo de
Persistncia
CREATE TABLE `aluno` (
`id_aluno` INT(10) NOT NULL
AUTO_INCREMENT,
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
AUTO_INCREMENT= 0
25
26
Exemplo de mapeamento
27
1.
import javax.persistence.*;
2.
3.
@Entity
@Table(name="aluno", schema=exemplo")
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Anotaes
@Entity: informa que a classe mapeada
persistente
@Table: informa nome da tabela
correspondente.
name: nome da tabela;
28
Anotaes
@Id: define chave primria.
@GeneratedValue: define mecanismo de
strategy = GenerationType.IDENTITY
@Column:
name: define nome da coluna que mapeia
atributo.
29
Configurao
Necessrio criar um arquivo
hibernate.cfg.xml
30
hibernate.cfg.xml
1.
2.
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property
name="hibernate.connection.url">jdbc:mysql://localhost:3309/exemplo</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.pool_size">10</property>
<mapping class="exemplo.Aluno"/>
</session-factory>
</hibernate-configuration
31
Dialetos
32
Manipulando objetos
33
Manipulando Objetos
34
Cdigo gerado
1.
2.
3.
35
Metodos
Session
36
SaveOrUpdate
37
Delete
38
Mapeamento Cliente
40
Mapeamento Cliente
41
Anotaes
@Transient: mapeia atributo no
persistente.
@Temporal: mapeamento de datas e
horas:
TemporalType.DATE: usado para mapear
datas;
TemporalType.TIME: usado para mapear
hora;
TemporalType.TIMESTAMP: usado para
mapear datas e hora.
42
Anotaes
@Column: definio de uma coluna:
name: nome da coluna;
unique: unicidade ou no;
nullable: coluna nula ou no;
length: tamanho da coluna;
precision: preciso;
insertable: atributo deve ser inserido ou no;
updatable: atributo deve ser atualizado ou
no.
43
Mapeamento de Associaes
One-to-One, One-to-Many, Many-to-One, Manyto-Many
44
Tipos
Um-para-um;
Muitos-para-um;
Um-para-muitos;
Muitos-para-muitos
45
OneToMany
Exemplo:
Uma universidade possui N centros
@OneToMany;
46
One-To-Many
47
OneToMany
@OneToMany:
mappedBy: atributo no relacionamento
muitos-para-um;
fetch: indica quando o contedo ser trazido
do banco de dados;
cascade: indica ao em cascata do
relacionamento:
CascadeType.PERSIST;
CascadeType.REMOVE;
CascadeType.REFRESH;
CascadeType.MERGE;
CascadeType.ALL;
48
OneToMany
@OneToMany:
fetch: (javax.persistence.FetchType)
FetchType.EAGER: sempre trazer;
FetchType.LAZY: trazer apenas quando
necessrio.
@OrderBy:
Ordena coleo
<atributo> ASC
<atributo> DESC
49
Exemplo
@Cascade(CascadeType.ALL)
50
ManyToOne
Exemplo:
Uma universidade possui N centros
@OneToMany;
51
Mapeando Centro
52
Associaes - ManyToOne
@ManyToOne
fetch:
FetchType.EAGER;
FetchType.LAZY.
cascade.
chave estrangeira:
no;
updatable = atributo deve ser atualizado ou
no.
53
Associaes - ManyToOne
@Fetch: define como o atributo deve ser
54
ManyToMany
Nova tabela entre o relacionamento;
55
Mapeamento Departamento
56
Mapeamento Departamento
57
Mapeamento Curso
58
Associaes - ManyToMany
@ManyToMany
fetch:
FetchType.EAGER;
FetchType.LAZY.
cascade.
59
Associaes - ManyToMany
@JoinTable: informa qual a tabela
intermediria:
tabela intermediria;
inverseJoinColumns: qual coluna representa
a outra entidade do relacionamento.
60
Exemplo
61
Associaes - ManyToMany
Nova tabela entre o relacionamento com
outros atributos;
62
Associaes ManyToMany
Classe extra para a chave composta:
63
Associaes - ManyToMany
64
Exemplo
65
OneToOne
Formas de Mapeamento:
@OneToOne.
66
Associaes OneToOne
Tabela endereco vai ter referncia para
universidade
67
Associaes OneToOne
68
Exemplo
69
Referncias
Raphaela Galhardo Fernandes, Gleydson de
Hibernate:
http://sourceforge.net/projects/hibernate/file
s/hibernate3/
http://www.hibernate.org/docs
70