Professional Documents
Culture Documents
Clébia Alves
Cleyton Vanut
Mouglas Eugênio
Ronnie Santos
07/12/21
2
O.O. + B.D. , Quadro atual
Objeto
Tabela
Hibernate - Definição 4
5
je ti vo : d i m inuir a
Ob tre os
le x id a d e e n
comp
og ra m a s J a va, que
pr a r com um
t r a b alh
precisam d o modelo
d e d a d o s
banco
relacional.
o Nela você não vai referenciar tabelas, vai referenciar os seus objetos do
modelo que foram mapeados para as tabelas do banco de dados.
Ex.:
Associação
- Visa facilitar, para
Composição
os Herança
desenvolvedores, a Polimorfismo
implementação da
camada de e coleções Java
persistência da
aplicação
12
Persistência e Mapeamento
Mapeamento muitos-para-um
com Cliente -> Dependentes
<many-to-one name="cliente"
column="CLIENTE_ID"
class="Cliente"
not-null="true"/>
16
Arquitetura
Arquitetura Baseada em Camadas
Import org.apache.log4j.BasicConfigurator;
import org.hibernate.cfg.Configuration;
public class BemVindoHibernate {
public static void main(String[]
args) { // Configura Log4j sem exigir arquivo
BasicConfigurator.configure();
// Hibernate procura por
'hibernate.properties‘. Deve estar disponível no
CLASSPATH
new Configuration();
System.out.println("Bem-vindo ao curso
de Hibernate"); }
}
20
SessionFactory(org.hibernate.Session
Factory)
Session sessao =
fabricaSessoes.openSession();
Transaction transacao =
sessao.beginTransaction();
Pessoa pessoa =
sessao.load(Pessoa.class, new Long(1));
sessao.delete(pessoa);
transacao.commit();
sessao.close();
21
Transaction(org.hibernate.Tr Exemplo:
ansaction)
import org.hibernate.Session;
É uma API opcional do import org.hibernate.SessionFactory;
Hibernate; import org.hibernate.Transaction;
Abstração da implementação import
de transações usada no org.hibernate.cfg.Configuration;
código
A implementação real public class InsereA {
pode ser uma transação public static void
JTA, JDBC, etc. main(String[] args) {
Essencial para garantir a Configuration cfg = new
portabilidade de aplicação
entre diferentes ambientes e Configuration().configure();
containers; SessionFactory sf =
cfg.buildSessionFactory();
Session s =
sf.openSession(); Transaction tr =
s.beginTransaction();
s.save(new A("a1"));
s.save(new A("a2"));
tr.commit();
s.close(); }
}
22
Criteria e Query
Critério é uma alternativa que faz
As consultas Query são feitas em a mesma coisa usando métodos da
SQL(Structured Query Language) ou API (em Java, em vez de HQL);
HQL(Hibernate Query Language);
Objetos Query são usados para:
- Passar parâmetros para a consulta Uma Query só pode ser usada
em HQL; dentro de sua sessão;
- Filtrar resultados;
- Executar os comandos da consulta;
Exemplo:
String hql=
“from Produto where preco>:preco”;
Query
query=session.createQuery(hql);
query.setDouble(“preco”,25,0);
List results=query.list();
23
Identidade
Em Java:
Object.equals(Object ob);
A solução é a chave
//Listagem do arquivo Pessoa.java
public class Pessoa {
private String nome;
private String email;
private String telefone;
private Endereco endereco;
private Integer id;
//métodos getters e setters das propriedades
}
25
26
Arquivo de Mapeamento
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Pessoa">
<!-- Identificador da classe -->
<id name="id">
<generator class="increment"/>
</id>
<!-- Propriedades da classe -->
<property name="nome"/>
<property name="telefone"/>
<property name="email"/>
<!-- Relacionamento da classe -->
<one-to-one
name="endereco"
class="Endereco"
cascade="save-update"/>
</class>
</hibernate-mapping>
27
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Endereco">
<id name="id"
column="Pessoa_id">
<generator class="foreign">
<param name="property">pessoa</param>
</generator>
</id>
<property name="bairro"/>
<property name="cidade"/>
<property name="complemento"/>
<property name="estado"/>
<property name="numero"/>
<property name="rua"/>
<property name="cep"/>
<one-to-one
name="pessoa"
class="Pessoa"
constrained="true"/>
</class>
</hibernate-mapping>
28
Herança
Configurando...
Para o Hibernate funcionar corretamente
30
Persistência em casacata
Mecanismos de persistência
Existem três tipos de objetos:
• “transient” (transientes)
• “detached” (desligados)
• “persistent” (persistentes)
31
Sessão e transação
Projeto de BD
32
Insert/Update
Public void insert(Usuario user) {
//inicializa a factory de sessoes do Hibernate
SessionFactory sessionFactory=new
Configuration().configure().buildSessionFactory();
//abre uma nova sessão
Session session = sessionFactory.openSession();
//inicia uma transação
Transaction tx = session.beginTransaction();
//persiste o objeto
session.saveOrUpdate(user);
tx.commit(); //da commit na transação
session.close();
//fecha a sessãoo
}
35
Delete
Consultas
Public ArrayList getUsuarios() {
SessionFactory sessionFactory = new
Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
ArrayList arrayList = null;
//equivale a select * FROM tb_usuario
String SQL_STRING = "FROM Usuario as users";
Query query = session.createQuery(SQL_STRING);
ArrayList list = (ArrayList)query.list();
session.close();
Return list;
}
37
Classes Persistentes
obj1 == obj2
obj1.equals(obj2)
38
• Constante.
39
Objetos Persistentes, Transientes e Detached
Nas diversas
aplicações existentes, sempre que
for necessário propagar o estado
de um objeto que está em memória
para o banco de dados ou vice-
versa, há a necessidade de que a
aplicação interaja com uma camada
de persistência.
40
Objetos Persistentes, Transientes e Detached
41
42
Annotations
• @Length(min=3,max=100)
private String name;
• @Email
private String email;
• @Min(5)
private String password;
44
Boas Práticas
Escreva classes compactas e mapeie-
as usando <component>;