Introdução ao JPA com Hibernate
Danilo Braga
ICC - Software II
Objetivos
O Conhecer os conceitos básicos
O JPA
O Hibernate
O Visão geral sobre mapeamento
objeto/relacional
http://www.desenvolvimentopessoal-dp.com/images/objetivos.png
Sumário O Persistência de dados
O Conceitos básicos e tipos
O Foco na plataforma Java
O Mapeamento Objeto Relacional
O JPA
O Hibernate
O Como se aplica o JPA
O Conceitos principais
http://www.espargirica.com.br/negocio/figuras_negocio/objetivos_indices.jpg
Conceitos básicos de Persistência
O A maioria das aplicações necessitam que
dados sejam persistidos
O Aplicações
O Busca e
armazenamento;
O Organização ;
O Compartilhamento
dos dados;
O Integridade dos
dados;
O Controle de
concorrência;
O …
Conceitos básicos de Persistência
O Tipos de persistência
O Arquivos de textos simples(txt, xml, …)
O Banco de dados OO
O Banco de dados relacionais
http://sorisomail.com/img/129885606369.gif http://www.wp7connect.com/wp-content/uploads/2011/09/file-cabinet.jpg
Conceitos básicos de Persistência
O Escrita demasiada de código
O Repetitivo e de difícil manutenção
O Produtividade fortemente afetada
O Modelagem dos objetos fica
prejudicada
O Outras camadas ficam acopladas à
Camada de Persistência
Bancos de Dados Relacionais Vs Linguagens OO
ORM
O ORM – Mapeamento Objeto-Relacional
O Permite a construção de sistemas O.O.
utilizando a persistência dos objetos em
BD relacionais.
O Converte objetos em linhas, colunas e
relacionamentos entre tabelas
ORM
Relacional O.O.
O.O. Relacional
Java Persistence API (JPA)
O Especificado pelo Java Community Process
O JSR 317 - 2006
O Baseou-se em diversas soluções existentes.
O Frameworks passaram a implementar esta
especificação
O Recursos são um sub-conjunto dos encontrados
nos frameworks que a implementam
Java Persistence API (JPA)
O Configuração através de @Annotations
O É um padrão JavaEE(a partir do Java 5)
O Implementações Disponíveis
O Hibernate - JBoss
O TopLink - Oracle
O OpenJPA - Apache
O EclipseLink - Eclipse
O Entre outros...
O Criado para padronizar as ferramentas de ORM
O Forma de diminuir a complexidade do desenvolvimento em alguns casos.
O Gerência de Transações
O Cache
O JPQL – Java Persistence Query Language
Java Persistence API (JPA)
JPA não é Hibernate !! Especificação vs. Implementação
Hibernate
O Framework de mapeamento Objeto-Relacional
O Cria uma interface entre a base de dados relacional e
a aplicação orientada a objetos
O Framework de persistência Java mais utilizado e
documentado
O Suporta classes desenvolvidas com agregação,
herança, polimorfismo, composição e coleções
Hibernate
O Abstrai o banco de dados utilizado
O suporte para praticamente todos os bancos
de dados comerciais
O Gera código SQL a partir dos
mapeamentos criados
Hibernate - Vantagens
O Produtividade
O Exclui a necessidade de se escrever código
referente a persistência
O Permite criação de DAO genérico
O Possui mecanismos de cache e lazy
O Facilita no controle de transaçõoes
O Manutenbilidade
O Menos linhas de códigos
O Facilita a refatoração
Hibernate - Desvantagens
O Overheads
O Algumas consultas podem ser otimizadas se
escritas em SQL
O Operações que utilizam JDBC puro podem ser
mais rápidas
O Nem todas as operações podem ser realizadas
utilizando Hibernate
O Realizar o mapeamento das classes pode não
ser um tarefa trivial
JPA - Por onde começar
O Definir unidade persistência
O Mapear (anotar) Classes
Definir Unidade persistência
O Unidade de persistência é uma referência a uma unidade de trabalho com um banco;
O Ela é definida no arquivo (path default)
src/META-INF/persistence.xml
O Neste arquivo é definido qual implementação:
O hibernate, toplink, ...
O E qual base de dados:
O MySql, Oracle,...
persistence.xml
persistence.xml
• Hibernate.Dialect • Definir qual será o dialeto, ou seja, para qual banco será
gerado código
• Hibernate.connection.driver_class • Definir o driver de conexão
persistence.xml • Hibernate.hbm2ddl.auto
• Atualizar automaticamente o esquema no banco de dados.
• Hibernate.show_sql, Hibernate.format_sql, Hibernate.use_sql_comments • Formatar no console/log da aplicação
• Hibernate.connection.url, username e password • Definir a string de conexão com a base de dados
Mapear Classes
O @Entity: define que a entidade será persistente
(opcional)
@Entity(name=“nomeTabela”)
Mapear Atributos
Mapear Relacionamentos
O Podem ser de diversas multiplicidades
O @OneToOne
O @OneToMany
O @ManyToOne
O @ManyToMany
O one-to-many e many-to-many é necessário a utilização de coleções
Mapear Relacionamentos One to One
Mapear Relacionamentos Many to Many
Departamento
Curso
O private EntityManager entityManager = EMUtil.getEntityManager();
O public void acao(Entidade entidade){
try{
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
entityManager.persist (entidade);
entityManager.find (Entidade.class, id)
entityManager.remove (entidade);
… transaction.commit();
} catch (Exception ex){
transaction.rollback();
log.error(“Ops… Não deu!”);
}
Considerações
O Muito produtivo para operações básicas de CRUD
O DAO Genérico
O Documentação abrangente
O Padrão amplamente utilizado no mercado
O Dependendo do negócio da aplicação pode atrapalhar mais do que ajudar
Obrigado!
Dúvidas
http://1.bp.blogspot.com/-ExND_ShM0nw/T-vCZFYpNbI/AAAAAAAAAec/h0g0EcCkz9k/s1600/joinha.jpg http://eduardocarvalho.net/wp-content/uploads/2012/07/ponto-de-interroga%C3%A7%C3%A3o.jpg
Referências
O Apostila K19
O k19-k21-persistencia-com-jpa2-e-hibernate
O Apostila Caelum
O FJ-25 - Persistência com JPA e Hibernate
O Persistência de dados com Java Persistence API - Hibernate
O Jefferson S Silva
O www.hibernate.org/