introdução configuração padrão pojo framework mapeamento ... · separação entre a...

48
Framework Pesistência de Objetos Java Prof. Enzo Seraphim Introdução Configuração Padrão POJO Mapeamento Annotation Persistência Objetos

Upload: vonhan

Post on 15-Nov-2018

251 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

Framework Pesistência de

ObjetosJava

Prof. Enzo Seraphim

Introdução

Configuração

Padrão POJO

Mapeamento Annotation

PersistênciaObjetos

Page 2: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 3: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 4: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 5: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

Problemas dos SGBDRs

Modelagem– Não há polimorfismo– Não há herança

Lógica de negócio– Stored procedures (perca de

portabilidade)

Page 6: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 7: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

Framework Pesistência de

ObjetosHibernate

Prof. Enzo Seraphim

Introdução

Configuração

Padrão POJO

Mapeamento Annotation

PersistênciaObjetos

Page 8: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 9: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

phpMyAdmin

Page 10: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 11: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

Mysql:Criando Base e Usuário no

locadora

locadoralocadora

localhost

Page 12: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 13: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

Netbeans: Criando Conexão

locadora

localhost3306

locadoralocadora

Page 14: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

Netbeans:Persistence Unit

– Aba Projeto – Menu contexto:

Novo | Outro

Page 15: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

Netbeans:Configurando PU

locadoraPU

jdbc:mysql://localhost:3306/locadoraHibernate(JPA 1.0)

Nome da Persistence Unit Biblioteca Conexão da base de dados:

Page 16: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

Netbeans:Adicionando Entidades

Page 17: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

Netbeans:persistence.xml

O arquivo persistence.xml contém as configurações para base de dados

Page 18: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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>

Page 19: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

Netbeans:Biblioteca Mysql JDBC

– Aba Projeto – Bibliotecas– Menu contexto:

Add Library

Page 20: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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(); }}

Page 21: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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();}

Page 22: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

phpMyAdmin:Visualizar Tabelas e Dados

PhpMyAdmin | Database | locadora

Page 23: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

Framework Pesistência de

ObjetosHibernate

Prof. Enzo Seraphim

Introdução

Configuração

Padrão POJO

Mapeamento Annotation

PersistênciaObjetos

Page 24: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 25: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 26: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 27: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

Framework Pesistência de

ObjetosHibernate

Prof. Enzo Seraphim

Introdução

Configuração

Padrão POJO

Mapeamento Annotation

PersistênciaObjetos

Page 28: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 29: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 30: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 31: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 32: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 33: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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")

Page 34: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 35: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 36: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 37: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

Framework Pesistência de

ObjetosHibernate

Prof. Enzo Seraphim

Introdução

Configuração

Padrão POJO

Mapeamento Annotation

PersistênciaObjetos

Page 38: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 39: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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();}

Page 40: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 41: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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();}

Page 42: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 43: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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();}

Page 44: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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

Page 45: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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();

Page 46: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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();

Page 47: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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();

Page 48: Introdução Configuração Padrão POJO Framework Mapeamento ... · Separação entre a aplicação e o acesso ao ... Hibernate Prof. Enzo Seraphim Introdução Configuração Padrão

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.