35
Globalcode – Open4education Trilha – Java EE University Frederico Maia Arantes Desenvolvedor de Software / Instrutor / Empreendedor

Introdução a JPA e Hibernate - TDC 2012

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Introdução a JPA e Hibernate - TDC 2012

Globalcode – Open4education

Trilha – Java EE UniversityFrederico Maia Arantes

Desenvolvedor de Software / Instrutor / Empreendedor

Page 2: Introdução a JPA e Hibernate - TDC 2012

Globalcode – Open4education

Introdução à JPA 2 e Hibernate

Produtividade persistindo dados em Java

Page 3: Introdução a JPA e Hibernate - TDC 2012

Globalcode – Open4education

Sobre mim

Frederico Maia Arantes

Page 4: Introdução a JPA e Hibernate - TDC 2012

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?

Page 5: Introdução a JPA e Hibernate - TDC 2012

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

Page 6: Introdução a JPA e Hibernate - TDC 2012

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

Page 7: Introdução a JPA e Hibernate - TDC 2012

Globalcode – Open4education

Persistência de dados

Page 8: Introdução a JPA e Hibernate - TDC 2012

Globalcode – Open4education

Persistência de dados

Page 9: Introdução a JPA e Hibernate - TDC 2012

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?

Page 10: Introdução a JPA e Hibernate - TDC 2012

Globalcode – Open4education

Surge o Super Hibernate!

Page 11: Introdução a JPA e Hibernate - TDC 2012

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

Page 12: Introdução a JPA e Hibernate - TDC 2012

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!

Page 13: Introdução a JPA e Hibernate - TDC 2012

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!

Page 14: Introdução a JPA e Hibernate - TDC 2012

Globalcode – Open4education

Inserindo dados sem JPA

Page 15: Introdução a JPA e Hibernate - TDC 2012

Globalcode – Open4education

Inserindo dados com JPA

Page 16: Introdução a JPA e Hibernate - TDC 2012

Globalcode – Open4education

Buscando dados sem JPA

Page 17: Introdução a JPA e Hibernate - TDC 2012

Globalcode – Open4education

Buscando dados com JPA

Page 18: Introdução a JPA e Hibernate - TDC 2012

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

Page 19: Introdução a JPA e Hibernate - TDC 2012

Globalcode – Open4education

Classe Java comum

Page 20: Introdução a JPA e Hibernate - TDC 2012

Globalcode – Open4education

Classe Java com JPA

Page 21: Introdução a JPA e Hibernate - TDC 2012

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

Page 22: Introdução a JPA e Hibernate - TDC 2012

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

Page 23: Introdução a JPA e Hibernate - TDC 2012

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

Page 24: Introdução a JPA e Hibernate - TDC 2012

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;

}

Page 25: Introdução a JPA e Hibernate - TDC 2012

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;

}

Page 26: Introdução a JPA e Hibernate - TDC 2012

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;

}

Page 27: Introdução a JPA e Hibernate - TDC 2012

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;

}

Page 28: Introdução a JPA e Hibernate - TDC 2012

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.

Page 29: Introdução a JPA e Hibernate - TDC 2012

Globalcode – Open4education

Relacionamentos

@Entity

public class Carro {

@OneToOne

private Motor motor;

}

@Entity

public class Motor {

@OneToOne(mappedBy = “motor”)

private Carro carro;

}

Page 30: Introdução a JPA e Hibernate - TDC 2012

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

Page 31: Introdução a JPA e Hibernate - TDC 2012

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.

Page 32: Introdução a JPA e Hibernate - TDC 2012

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.

Page 33: Introdução a JPA e Hibernate - TDC 2012

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.

Page 34: Introdução a JPA e Hibernate - TDC 2012

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)

Page 35: Introdução a JPA e Hibernate - TDC 2012

Globalcode – Open4education

Dúvidas?

Contatos

[email protected]

fredmaia

fredericomaia10