Introdução a JPA e Hibernate - TDC 2012

Preview:

DESCRIPTION

 

Citation preview

Globalcode – Open4education

Trilha – Java EE UniversityFrederico Maia Arantes

Desenvolvedor de Software / Instrutor / Empreendedor

Globalcode – Open4education

Introdução à JPA 2 e Hibernate

Produtividade persistindo dados em Java

Globalcode – Open4education

Sobre mim

Frederico Maia Arantes

Globalcode – Open4education

Agenda

Persistência de dados

O que é JPA?

O que é Hibernate?

Mapeando minhas entidades

Relacionamentos

Estratégias de herança

E agora, pra onde vou?

Globalcode – Open4education

Persistência de dados

“A persistência de dados, na computação, refere-se ao armazenamento não-volátil de dados, por exemplo, o armazenamento em um dispositivo físico como um disco rígido. Quando se grava um arquivo no disco, por exemplo, o dado está sendo “eternizado”, ou seja, deixa de ficar volátil na memória RAM e passa a ser escrito num dispositivo que armazena a informação de modo que ela não despareça facilmente.” Wikipedia

Globalcode – Open4education

Persistência de dados

Em Java e desenvolvimento de software em geral, persistência de dados significa gravar dados

Na enorme maioria dos casos, gravamos em bancos de dados relacionais (por enquanto)

Em contra partida, desenvolvemos orientados a objetos. Dois paradigmas bem diferentes

Globalcode – Open4education

Persistência de dados

Globalcode – Open4education

Persistência de dados

Globalcode – Open4education

Persistência de dados

Relacional x Orientado a Objetos. Dois paradigmas bem diferentes. Como resolver as diferenças?

Como mapear as tabelas do banco de dados para os objetos Java?

Ou deveríamos mapear os objetos para as tabelas?

Globalcode – Open4education

Surge o Super Hibernate!

Globalcode – Open4education

O que é Hibernate?

Framework para mapeamento objeto relacional

Permite que desenvolvamos naturalmente no modelo orientado a objetos

Persistência transparente, simplificando e agilizando o desenvolvimento

Independente de banco de dados

Globalcode – Open4education

O que é Hibernate?

Mantido pela JBoss e comunidade Java

Não faz parte da especificação padrão Java

E se a JBoss parar de desenvolver o projeto? Como ficamos? Queremos continuá-lo! Queremos que ele se torne um padrão Java!

Globalcode – Open4education

O que é JPA?

Java Persistence API, especificação de persistência de dados em Java

Baseada nos principais frameworks do mercado como o Hibernate

É uma especificação! Precisa de uma implementação como Hibernate, TopLink e EclipseLink.

JPA e Hibernate não são a mesma coisa!

Show me the code!

Globalcode – Open4education

Inserindo dados sem JPA

Globalcode – Open4education

Inserindo dados com JPA

Globalcode – Open4education

Buscando dados sem JPA

Globalcode – Open4education

Buscando dados com JPA

Globalcode – Open4education

Mapeamento

Mapear o modelo orientado a objetos e o modelo entidade relacionamento

@Entity: aparece antes do nome das classes que terão objetos persistidos no BD

@Id: indica a chave primária

@GeneratedValue: indica que o valor da chave primária deve ser gerado pelo BD quando um registro é inserido

Globalcode – Open4education

Classe Java comum

Globalcode – Open4education

Classe Java com JPA

Globalcode – Open4education

Operações básicas

Persistindo: Pessoa p = new Pessoa(“Fred”);

manager.persist(p);

Buscando: manager.find(Pessoa.class,1L);

manager.getReference(Pessoa.class,1L);

Removendo: manager.remove(Pessoa.class,1L);

Globalcode – Open4education

Operações básicas

Atualizando: Pessoa p = manager.find(Pessoa.class, 1L);

p.setNome(“Novo Nome”);

manager.persist(p);

Listando: Query query = manager.createQuery(“select p from Pessoa p”);

List<Pessoa> pessoas = query.getResultList();

Globalcode – Open4education

Relacionamentos

Os relacionamentos entre as entidades de um domínio devem ser expressos na modelagem através de vínculos entre classes. Podemos definir quatro tipos de relacionamentos de acordo com a cardinalidade.

One to One

One to Many

Many to One

Many to Many

Globalcode – Open4education

Relacionamentos

One to One: por exemplo, um estado é governado por apenas um governador e um governador governa apenas um estado.

@Entity

public class Estado {

@OneToOne

private Governador governador;

}

Globalcode – Open4education

Relacionamentos

One to Many: por exemplo, um departamento possui muitos funcionários e um funcionário trabalha em apenas em um departamento.

@Entity

public class Departamento {

@OneToMany

private List<Funcionario> funcionarios;

}

Globalcode – Open4education

Relacionamentos

Many to One: por exemplo, um pedido pertence a apenas um cliente e um cliente faz muitos pedidos.

@Entity

public class Pedido {

@ManyToOne

private Cliente cliente;

}

Globalcode – Open4education

Relacionamentos

Many to Many: por exemplo, um livro possui muitos autores e um autor possui muitos livros.

@Entity

public class Livro {

@ManyToMany

private List<Autor> autores;

}

Globalcode – Open4education

Relacionamentos

Relacionamentos bidirecionais: quando expressamos um relacionamento entre entidades colocando um atributo em uma das entidades, podemos acessar a outra entidade a partir da primeira.

Vamos ver um exemplo.

Globalcode – Open4education

Relacionamentos

@Entity

public class Carro {

@OneToOne

private Motor motor;

}

@Entity

public class Motor {

@OneToOne(mappedBy = “motor”)

private Carro carro;

}

Globalcode – Open4education

Estratégias de herança

Um conceito um pouco complexo, a princípio, de se mapear é o de Herança. A especificação JPA define três estratégia para realizar o mapeamento de herança.

Single Table

Joined

Table per Class

Globalcode – Open4education

Single Table

A mais comum e a que possibilita melhor desempenho em relação a velocidade das consultas.

Será criada apenas uma tabela com o nome da super classe para armazenar os dados dos objetos.

Globalcode – Open4education

Joined

Uma tabela para cada classe da hierarquia é criada. Em cada tabela, apenas os campos referentes aos atributos da classe correspondente são criados.

As tabelas correspondentes as sub classes possuem chaves estrangeiras vinculadas a tabela correspondente a super classe.

Globalcode – Open4education

Table per Class

Uma tabela para cada classe concreta da hierarquia é criada.

Os dados de um objeto não são colocados em tabelas diferentes. Para remontar um objeto não é necessário realizar operações de join.

A desvantagem é que não existe um vínculo explícito no banco de dados entres as tabelas.

Globalcode – Open4education

E agora pra onde vou?

http://docs.oracle.com/javaee/

Apostilas da K19

Blog e apostilas da Caelum

Livro: Java Persistence With Hibernate

Documentação oficial do Hibernate

Vários Ebooks gratuitos e em inglês (WowEbook)

Globalcode – Open4education

Dúvidas?

Contatos

fredericomaia10@gmail.com

fredmaia

fredericomaia10

Recommended