introdução a jpa e hibernate - tdc 2012
DESCRIPTION
TRANSCRIPT
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)