Introdução
Configuração
Padrão POJO
Mapeamento
Annotation
Persistência
Objetos
Framework
Pesistência de
Objetos
Java
Prof. Enzo Seraphim
O que é?


Framework persistência de Objetos é uma
moderna solução de mapeamento objetorelacional(ORM)
– Persistência tranparente (POJO)
– Mapeamento de Classes e
Relacionamentos em Tabelas
– Transparência
Separação entre a aplicação e o acesso ao
banco
O que é?



Facilidade de uso
– Controle de transações
– Independência quanto ao tipo de base de
dados
Consulta de dados
– Java Persistence Query Language
– Criteria Queries
Licença LGPL
Transparência




Persistência sem impacto no código dos
objetos de negócio
Qualquer classe pode ser uma classe
persistente sem ser necessário
implementar nenhuma classe ou interface
Classes persistentes podem ser usadas fora
do contexto de persistência (ex Testes)
Total portabilidade sem dependências
Problemas dos SGBDRs

Modelagem
– Não há polimorfismo
– Não há herança

Lógica de negócio
– Stored procedures (perca de
portabilidade)
Vantagens dos SGBDRs




Trabalhar com grandes quantidades de
dados
– Busca, ordenação
Trabalhar com conjuntos de dados
– Junções e agregações
Compartilhamento
– Concorrência (Transações)
– Muitas aplicações
Integridade
– Restrições (Constraints)
– Isolação de transações
Introdução
Configuração
Padrão POJO
Mapeamento
Annotation
Persistência
Objetos
Framework
Pesistência de
Objetos
Hibernate
Prof. Enzo Seraphim
Banco de Dados Mysql




Mapeamento de classes para Tabelas
(framework Objeto-Relacional)
– Hibernate (ou outro)
Banco de Dados Relacional
– MySQL (ou outro)
Administração do MySQL
– phpMyAdmin (ou outra ferramenta)
Wamp=mysql+phpMyAdmin+etc
– Iniciar Wamp (icone lado relógio)
– Menu contexto phpMyAdmin
phpMyAdmin
Base de Dados e Usuário

Para o mapeamento automático de classes
para tabelas Hibernate necessita:
– Banco de Dados: MySQL
– Base de Dados: locacao
– Usuário: locacao
– Senha: locacao

Para criar base e usuário no MySQL
– Abra o phpMyAdmin
– Selecione a aba Privilégios
– Selecione criar novo usuário
Mysql:
Criando Base e Usuário no
locadora
localhost
locadora
locadora
Netbeans:
Conexões Bases de Dados

Netbeans oferece assistente para gerenciar
conexões com bases de dados:
– Conexões podem ser usadas por wizards e
plugins para facilitar configurações

Criar uma conexão
– Aba Esquerda:
Serviços
– Base de Dados
– Menu contexto:
nova conexão
Netbeans:
Criando Conexão
localhost
3306
locadora
locadora
locadora
Netbeans:
Persistence Unit
– Aba Projeto
– Menu contexto:
Novo | Outro
Netbeans:
Configurando PU



Nome da Persistence Unit
Biblioteca
Conexão da base de dados:
locadoraPU
Hibernate(JPA 1.0)
jdbc:mysql://localhost:3306/locadora
Netbeans:
Adicionando Entidades
Netbeans:
persistence.xml

O arquivo persistence.xml contém as
configurações para base de dados
persistence.xml para
Oracle Express Edition
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" … >
<persistence-unit name="eleicaoPU" … >
...
<properties>
<property … />
<property name="hibernate.dialect"
value="org.hibernate.dialect.OracleDialect" />
</properties>
</persistence-unit>
</persistence>
Netbeans:
Biblioteca Mysql JDBC
– Aba Projeto
– Bibliotecas
– Menu contexto:
Add Library
Trabalhando com persistencia
:EntityManagerFactory
persistence.xml
createEntityManager()
createEntityManager
:EntityManager
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class App{
public static void main (String [] args ){
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("locadoraPU");
EntityManager em = emf.createEntityManager();
em.close();
emf.close(); }}
Criando o banco

Manipulação de objeto no base de dados
– EntityManagerFactory e EntityManager

Definir classe (main) para criar tabelas:
– EntityManager + Property
Properties={"hibernate.hbm2ddl.auto",
"create"}
public static void main (String [] args ){
Properties properties = new Properties();
properties.setProperty(
"hibernate.hbm2ddl.auto", "create");
EntityManagerFactory emf =
Persistence.createEntityManagerFactory(
"locadoraPU", properties);
EntityManager em = emf.createEntityManager();
em.close();
emf.close();
}
phpMyAdmin:
Visualizar Tabelas e Dados

PhpMyAdmin | Database | locadora
Introdução
Configuração
Padrão POJO
Mapeamento
Annotation
Persistência
Objetos
Framework
Pesistência de
Objetos
Hibernate
Prof. Enzo Seraphim
Exemplo
Cliente
-login:String
-cpf:String
-nome:String
*
Locacao
-id:int
-locacao:Calendar
-devolucao:Calendar
package br.edu.unifei.bd.locadora;
public class Filme {
private int codigo;
private String nome;
public int getCodigo(){
return codigo;}
private void setCodigo(int v){
codigo = codigo;}
public String getNome(){
return nome;}
private void setNome(int nome){
this.nome = nome;}
}
1
Filme
-codigo:int
-nome:String
Exemplo
Cliente
-login:String
-cpf:String
-nome:String
*
Locacao
-id:int
-locacao:Calendar
-devolucao:Calendar
package br.edu.unifei.bd.locadora;
public class Locacao {
private int id;
private Filme filme;
private Cliente cliente;
private Calendar locacao;
private Calendar devolucao;
//... Get´s e Set´s
}
1
Filme
-codigo:int
-nome:String
Exemplo
Cliente
-login:String
-cpf:String
-nome:String
*
Locacao
-id:int
-locacao:Calendar
-devolucao:Calendar
1
Filme
-codigo:int
-nome:String
package br.edu.unifei.bd.locadora;
public class Cliente {
private String login;
private String CPF;
private String nome;
private List<Locacao> locacoes =
new ArrayList<Locacao>();
public int sizeOfLocacao(){...}
public Iterator<Locacao> iteratorLocacao(){...}
public boolean addLocacao(Locacao v){...}
public Locacao removeLocacao(int idx){...}
//... Get´s e Set´s
}
Introdução
Configuração
Padrão POJO
Mapeamento
Annotation
Persistência
Objetos
Framework
Pesistência de
Objetos
Hibernate
Prof. Enzo Seraphim
Anotações





Annotation é uma opção do uso de
metadados ao longo do código.
– Interpretação realizada posteriormente
por um compilador ou pré compilador
para realizar alguma tarefa.
Hibernate Annotation é uma
implementação JPA(Java Persistente API)
A anotação é feita na própria classe
– maior Produtividade
Atributos não necessitam ser mapeados
pois, por padrão são persistentes
Annotation substitui o mapeamento por
Anotações



Atributos não necessitam ser mapeados pois,
por padrão são persistentes
Annotation:
– antes class: @Entity
– antes atributo chave: @Id
– chave autoincremento:@GeneratedValue
– antes atributo relacionamento (UML):
@OneToMany, @OneToOne,
@OneToMany, @ManyToMany
Exemplo
Cliente
-login:String
-cpf:String
-nome:String
*
Locacao
-id:int
-locacao:Calendar
-devolucao:Calendar
1
package br.edu.unifei.bd.locadora;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Filme {
@Id
@GeneratedValue
private int codigo;
private String nome;
//... Get´s e Set´s
}
Filme
-codigo:int
-nome:String
Exemplo
Cliente
-login:String
-cpf:String
-nome:String
*
Locacao
-id:int
-locacao:Calendar
-devolucao:Calendar
package br.edu.unifei.bd.locadora;
...
@Entity
public class Locacao {
@Id
@GeneratedValue
private int id;
@OneToOne
private Filme filme;
@ManyToOne
private Cliente cliente;
private Calendar locacao;
private Calendar devolucao;
//... Get´s e Set´s
}
1
Filme
-codigo:int
-nome:String
Exemplo
Cliente
-login:String
-cpf:String
-nome:String
*
Locacao
-id:int
-locacao:Calendar
-devolucao:Calendar
package br.edu.unifei.bd.locadora;
...
@Entity
public class Cliente {
@Id
private String login;
private String CPF;
private String nome;
@OneToMany
private List<Locacao> locacoes =
new ArrayList<Locacao>();
//... Get´s e Set´s
}
1
Filme
-codigo:int
-nome:String
Generalização

Cliente
login:String
idade:String
nome:String
Annotation Generalização:
Mensal
– antes class: @Entity
credito:float
– tipo mapeamento: @Inheritance
Diario
ultimaLocacao
strategy=InheritanceType.SINGLE_TABLE
strategy=InheritanceType.JOINED
strategy=InheritanceType.TABLE_PER_CLASS
– discriminador:@DiscriminatorColumn
(name="tipoPessoa",
discriminatorType=DiscriminatorType.STRING)
– Valor discriminador: @DiscriminatorValue
(value="Pessoa")
Cliente
Generalização
login:String
idade:String
nome:String
Mensal
credito:float
Diario
ultimaLocacao
package br.edu.unifei.bd.locadora;
...
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="tipoCliente",
discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue(value="Cliente")
public class Cliente {
@Id
private String login;
private String CPF;
private String nome;
@OneToMany
private List<Locacao> locacoes =
new ArrayList<Locacao>();
//... Get´s e Set´s
}
Cliente
Generalização
login:String
idade:String
nome:String
Mensal
credito:float
package br.edu.unifei.bd.locadora;
...
@Entity
@DiscriminatorValue(value="Mensal")
public class Mensal extends Cliente{
private float credito;
//... Get´s e Set´s
}
Diario
ultimaLocacao
Cliente
Generalização
login:String
idade:String
nome:String
Mensal
credito:float
package br.edu.unifei.bd.locadora;
...
@Entity
@DiscriminatorValue(value="Diario")
public class Diario extends Cliente{
private float credito;
//... Get´s e Set´s
}
Diario
ultimaLocacao
Introdução
Configuração
Padrão POJO
Mapeamento
Annotation
Persistência
Objetos
Framework
Pesistência de
Objetos
Hibernate
Prof. Enzo Seraphim
Trabalhando com persistencia
persistence.xml
emf:EntityManagerFactory
createEntityManager()
createEntityManager
em:EntityManager
getTransaction
:EntityTransaction
getTransaction()
persist()
persist
c1:Cliente
login="ze"
cpf="123456789"
nome="Jose Silva"
persist
persist
*
l1:Locacao
id="1"
locacao
devolucao
begin()
commit()
1
f1:Filme
codigo="1"
nome="HP 1"
EntityManagerFactory
(javax.persistence)




Threadsafe
Fábrica de EntityManager
Geralmente se usa uma por aplicação
Montada a partir de
– código java
– arquivo configuração (persistence.xml)
public static void main (String [] args ){
EntityManagerFactory emf =
Persistence.createEntityManagerFactory(
"locadoraPU");
...
emf.close();
}
Trabalhando com persistencia
persistence.xml
emf:EntityManagerFactory
createEntityManager()
createEntityManager
em:EntityManager
getTransaction
:EntityTransaction
getTransaction()
persist()
persist
c1:Cliente
login="ze"
cpf="123456789"
nome="Jose Silva"
persist
persist
*
l1:Locacao
id="1"
locacao
devolucao
begin()
commit()
1
f1:Filme
codigo="1"
nome="HP 1"
EntityManager (javax.persistence)


Representa a troca de informações entre
aplicação e o esquema da base de dados
Tem uma transação (getTransaction)
– persistir objeto (persist)
– remover objeto (remove)
– consulta SQL (createQuery)
public static void main (String [] args ){
EntityManagerFactory emf =
Persistence.createEntityManagerFactory(
"locadoraPU");
EntityManager em = emf.createEntityManager();
...
em.close();
emf.close();
}
Trabalhando com persistencia
persistence.xml
emf:EntityManagerFactory
createEntityManager()
createEntityManager
em:EntityManager
getTransaction
:EntityTransaction
getTransaction()
persist()
persist
c1:Cliente
login="ze"
cpf="123456789"
nome="Jose Silva"
persist
persist
*
l1:Locacao
id="1"
locacao
devolucao
begin()
commit()
1
f1:Filme
codigo="1"
nome="HP 1"
EntityTransaction
(javax.persistence)



Representa a transação com a base de dados
que deve ser iniciada (begin) para a
persistência e em seguida pode ser:
Confirmada(commit) – gravar Objeto
Cancelada(rollback) – não gravar objeto
public static void main (String [] args ){
EntityManagerFactory emf =
Persistence.createEntityManagerFactory(
"locadoraPU");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
...
em.getTransaction().commit();
em.close();
emf.close();
}
Trabalhando com persistencia
persistence.xml
emf:EntityManagerFactory
createEntityManager()
createEntityManager
em:EntityManager
getTransaction
:EntityTransaction
getTransaction()
persist()
persist
c1:Cliente
login="ze"
cpf="123456789"
nome="Jose Silva"
persist
persist
*
l1:Locacao
id="1"
locacao
devolucao
begin()
commit()
1
f1:Filme
codigo="1"
nome="HP 1"
Inserindo um objeto
EntityManagerFactory emf=
Persistence.createEntityManagerFactory(
"locadoraPU");
EntityManager em=emf.createEntityManager();
em.getTransaction().begin();
Filme f1 = new Filme();
f1.setNome("HP 1");
em.persist(f1);
Cliente c1 = new Cliente();
c1.setCpf("123456789");
c1.setLogin("Jose Silva");
c1.setLogin("ze");
em.persist(c1);
em.getTransaction().commit();
em.close();
emf.close();
Carregando e Alterando um
Objeto
EntityManagerFactory emf=
Persistence.createEntityManagerFactory(
"locadoraPU");
EntityManager em=emf.createEntityManager();
em.getTransaction().begin();
Cliente c1 = (Cliente)em.createQuery
("from Cliente c where c.login = 'ze'").
getSingleResult();
c1.setNome("José Siqueira");
em.persist(c1);
em.getTransaction().commit();
em.close();
emf.close();
Carregando e Exluindo um
Objeto
EntityManagerFactory emf=
Persistence.createEntityManagerFactory(
"locadoraPU");
EntityManager em=emf.createEntityManager();
em.getTransaction().begin();
Locacao l1 = (Locacao)em.createQuery(
"from Locacao l where l.id = 1").
getSingleResult();
em.remove(l1);
em.getTransaction().commit();
em.close();
emf.close();
Os logotipos, marcas
comerciais e nomes de
produtos citados nesta
publicação tem apenas o
propósitos de
identificação e podem ser
marcas registradas de
suas respectivas
companhias.
Framework
Pesistência de
Objetos
Java
Prof. Enzo Seraphim
Download

Locacao - Unifei