introdução configuração padrão pojo framework mapeamento ... · separação entre a...
TRANSCRIPT
Framework Pesistência de
ObjetosJava
Prof. Enzo Seraphim
Introdução
Configuração
Padrão POJO
Mapeamento Annotation
PersistênciaObjetos
O que é?
Framework persistência de Objetos é uma moderna solução de mapeamento objeto-relacional(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
Framework Pesistência de
ObjetosHibernate
Prof. Enzo Seraphim
Introdução
Configuração
Padrão POJO
Mapeamento Annotation
PersistênciaObjetos
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
locadoralocadora
localhost
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
locadora
localhost3306
locadoralocadora
Netbeans:Persistence Unit
– Aba Projeto – Menu contexto:
Novo | Outro
Netbeans:Configurando PU
locadoraPU
jdbc:mysql://localhost:3306/locadoraHibernate(JPA 1.0)
Nome da Persistence Unit Biblioteca Conexão da base de dados:
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.xmlcreateEntityManager()
:EntityManager
createEntityManager
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
Framework Pesistência de
ObjetosHibernate
Prof. Enzo Seraphim
Introdução
Configuração
Padrão POJO
Mapeamento Annotation
PersistênciaObjetos
Exemplo
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;}}
Cliente
-login:String-cpf:String-nome:String
Locacao
-id:int-locacao:Calendar-devolucao:Calendar
Filme
-codigo:int-nome:String
* 1
Exemplo
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}
Cliente
-login:String-cpf:String-nome:String
Locacao
-id:int-locacao:Calendar-devolucao:Calendar
Filme
-codigo:int-nome:String
* 1
Exemplo
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}
Cliente
-login:String-cpf:String-nome:String
Locacao
-id:int-locacao:Calendar-devolucao:Calendar
Filme
-codigo:int-nome:String
* 1
Framework Pesistência de
ObjetosHibernate
Prof. Enzo Seraphim
Introdução
Configuração
Padrão POJO
Mapeamento Annotation
PersistênciaObjetos
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 arquivo XML
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
package br.edu.unifei.bd.locadora;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;@Entitypublic class Filme {
@Id @GeneratedValue private int codigo; private String nome; //... Get´s e Set´s}
Cliente
-login:String-cpf:String-nome:String
Locacao
-id:int-locacao:Calendar-devolucao:Calendar
Filme
-codigo:int-nome:String
* 1
Exemplo
package br.edu.unifei.bd.locadora;...@Entitypublic 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}
Cliente
-login:String-cpf:String-nome:String
Locacao
-id:int-locacao:Calendar-devolucao:Calendar
Filme
-codigo:int-nome:String
* 1
Exemplo
package br.edu.unifei.bd.locadora;...@Entitypublic 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
-login:String-cpf:String-nome:String
Locacao
-id:int-locacao:Calendar-devolucao:Calendar
Filme
-codigo:int-nome:String
* 1
login:Stringidade:Stringnome:String
DiarioMensal
Cliente
ultimaLocacaocredito:float
Generalização
Annotation Generalização:– antes class: @Entity– tipo mapeamento: @Inheritance
strategy=InheritanceType.SINGLE_TABLE
strategy=InheritanceType.JOINED
strategy=InheritanceType.TABLE_PER_CLASS
– discriminador:@DiscriminatorColumn (name="tipoPessoa",
discriminatorType=DiscriminatorType.STRING)
– Valor discriminador: @DiscriminatorValue (value="Pessoa")
Generalização
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 }
login:Stringidade:Stringnome:String
DiarioMensal
Cliente
ultimaLocacaocredito:float
Generalização
package br.edu.unifei.bd.locadora;...@Entity@DiscriminatorValue(value="Mensal")public class Mensal extends Cliente{
private float credito;
//... Get´s e Set´s }
login:Stringidade:Stringnome:String
DiarioMensal
Cliente
ultimaLocacaocredito:float
Generalização
package br.edu.unifei.bd.locadora;...@Entity@DiscriminatorValue(value="Diario")public class Diario extends Cliente{
private float credito;
//... Get´s e Set´s }
login:Stringidade:Stringnome:String
DiarioMensal
Cliente
ultimaLocacaocredito:float
Framework Pesistência de
ObjetosHibernate
Prof. Enzo Seraphim
Introdução
Configuração
Padrão POJO
Mapeamento Annotation
PersistênciaObjetos
Trabalhando com persistencia
emf:EntityManagerFactory
persistence.xml
createEntityManager()
createEntityManager
persistpersistpersist
:EntityTransaction
begin()commit()
getTransactionem:EntityManager
getTransaction()persist()
c1:Cliente
login="ze"cpf="123456789"nome="Jose Silva"
l1:Locacao
id="1"locacaodevolucao
f1:Filme
codigo="1"nome="HP 1"
* 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
emf:EntityManagerFactory
persistence.xml
createEntityManager()
createEntityManager
persistpersistpersist
:EntityTransaction
begin()commit()
getTransactionem:EntityManager
getTransaction()persist()
c1:Cliente
login="ze"cpf="123456789"nome="Jose Silva"
l1:Locacao
id="1"locacaodevolucao
f1:Filme
codigo="1"nome="HP 1"
* 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
emf:EntityManagerFactory
persistence.xml
createEntityManager()
createEntityManager
persistpersistpersist
:EntityTransaction
begin()commit()
getTransactionem:EntityManager
getTransaction()persist()
c1:Cliente
login="ze"cpf="123456789"nome="Jose Silva"
l1:Locacao
id="1"locacaodevolucao
f1:Filme
codigo="1"nome="HP 1"
* 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
emf:EntityManagerFactory
persistence.xml
createEntityManager()
createEntityManager
persistpersistpersist
:EntityTransaction
begin()commit()
getTransactionem:EntityManager
getTransaction()persist()
c1:Cliente
login="ze"cpf="123456789"nome="Jose Silva"
l1:Locacao
id="1"locacaodevolucao
f1:Filme
codigo="1"nome="HP 1"
* 1
Inserindo um objetoEntityManagerFactory 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();
Framework Pesistência de
ObjetosJava
Prof. Enzo Seraphim
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.