SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Trilha – Java EE University
            Frederico 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 Heranca. A especificacão JPA define
    ̂
 tres estratégia para realizar o mapeamento de
        ̧
 heranca.

 Single Table
 Joined
 Table per Class



                                      Globalcode – Open4education
Single Table
 A mais comum e a que possibilita melhor
                    ̧
 desempenho em relacã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 às sub classes
 possuem chaves estrangeiras vinculadas à tabela
 correspondente à 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 operacõ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


                              Globalcode – Open4education

Weitere ähnliche Inhalte

Was ist angesagt?

Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com HibernateDanilo Braga
 
Apostila hibernate
Apostila hibernateApostila hibernate
Apostila hibernateAgenor Neto
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineOtávio Calaça Xavier
 
Apresentação palestra ireport
Apresentação palestra ireportApresentação palestra ireport
Apresentação palestra ireportfpsgyn
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
 
BRMS - Business Rules Management System
BRMS - Business Rules Management SystemBRMS - Business Rules Management System
BRMS - Business Rules Management SystemSamuel Tauil
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Helder da Rocha
 
Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Maurício Linhares
 
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EEJavaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EELoiane Groner
 

Was ist angesagt? (20)

Minicurso jpa e hibernate
Minicurso jpa e hibernateMinicurso jpa e hibernate
Minicurso jpa e hibernate
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com Hibernate
 
Anotações do mapeamento OR
Anotações do mapeamento ORAnotações do mapeamento OR
Anotações do mapeamento OR
 
Hibernate-consultas
Hibernate-consultasHibernate-consultas
Hibernate-consultas
 
Spring Data Jpa
Spring Data JpaSpring Data Jpa
Spring Data Jpa
 
Apostila hibernate
Apostila hibernateApostila hibernate
Apostila hibernate
 
Spring Data Jpa
Spring Data JpaSpring Data Jpa
Spring Data Jpa
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP Doctrine
 
POO - 21 - Java e Banco de Dados
POO - 21 - Java e Banco de DadosPOO - 21 - Java e Banco de Dados
POO - 21 - Java e Banco de Dados
 
Apresentação palestra ireport
Apresentação palestra ireportApresentação palestra ireport
Apresentação palestra ireport
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
BRMS - Business Rules Management System
BRMS - Business Rules Management SystemBRMS - Business Rules Management System
BRMS - Business Rules Management System
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)
 
Artigo couchdb
Artigo couchdbArtigo couchdb
Artigo couchdb
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Integração com Banco de Dados
Integração com Banco de DadosIntegração com Banco de Dados
Integração com Banco de Dados
 
Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010
 
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EEJavaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
 
Tag Libraries
Tag LibrariesTag Libraries
Tag Libraries
 

Ähnlich wie Introdução à JPA e Hibernate

Dicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSFDicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSFDr. Spock
 
Python x R: mas e o Weka?
Python x R: mas e o Weka? Python x R: mas e o Weka?
Python x R: mas e o Weka? pichiliani
 
TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?tdc-globalcode
 
Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0 em uma apl...
Instanciando a Arquitetura Lambda com  GraphX e Elasticsearch 2.0  em uma apl...Instanciando a Arquitetura Lambda com  GraphX e Elasticsearch 2.0  em uma apl...
Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0 em uma apl...Luiz Henrique Zambom Santana
 
Google AppEngine and JEE
Google AppEngine and JEEGoogle AppEngine and JEE
Google AppEngine and JEERafael Nunes
 
Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...
Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...
Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...tdc-globalcode
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineEder Magalhães
 
Modelo orientado a objetos
Modelo orientado a objetosModelo orientado a objetos
Modelo orientado a objetosDaiana de Ávila
 
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPRodrigo Dos Santos
 
Oo presentation básica
Oo presentation básicaOo presentation básica
Oo presentation básicaLorena de Souza
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Adam Victor Brandizzi
 
02 alocacao de_memoria
02 alocacao de_memoria02 alocacao de_memoria
02 alocacao de_memoriasweetgi
 
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosTDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosRafael Chaves
 
3 oo-concepts
3 oo-concepts3 oo-concepts
3 oo-conceptsjorge600
 
Introdução ao desenvolvimento de apps para Android - Dia 1/2
Introdução ao desenvolvimento de apps para Android - Dia 1/2Introdução ao desenvolvimento de apps para Android - Dia 1/2
Introdução ao desenvolvimento de apps para Android - Dia 1/2Matheus Calegaro
 
Tdc2015 bigdata-mpias-final-pdf
Tdc2015 bigdata-mpias-final-pdfTdc2015 bigdata-mpias-final-pdf
Tdc2015 bigdata-mpias-final-pdfMinistry of Data
 

Ähnlich wie Introdução à JPA e Hibernate (20)

Open data
Open dataOpen data
Open data
 
Dicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSFDicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSF
 
Python x R: mas e o Weka?
Python x R: mas e o Weka? Python x R: mas e o Weka?
Python x R: mas e o Weka?
 
TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?
 
Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014
 
Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0 em uma apl...
Instanciando a Arquitetura Lambda com  GraphX e Elasticsearch 2.0  em uma apl...Instanciando a Arquitetura Lambda com  GraphX e Elasticsearch 2.0  em uma apl...
Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0 em uma apl...
 
Google AppEngine and JEE
Google AppEngine and JEEGoogle AppEngine and JEE
Google AppEngine and JEE
 
Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...
Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...
Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App Engine
 
Modelo orientado a objetos
Modelo orientado a objetosModelo orientado a objetos
Modelo orientado a objetos
 
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
 
Oo presentation básica
Oo presentation básicaOo presentation básica
Oo presentation básica
 
Gestão de dados de investigação da recolha até ao depósito: Uma abordagem bas...
Gestão de dados de investigação da recolha até ao depósito: Uma abordagem bas...Gestão de dados de investigação da recolha até ao depósito: Uma abordagem bas...
Gestão de dados de investigação da recolha até ao depósito: Uma abordagem bas...
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
 
Banco de dados_orientado_a_objetos
Banco de dados_orientado_a_objetosBanco de dados_orientado_a_objetos
Banco de dados_orientado_a_objetos
 
02 alocacao de_memoria
02 alocacao de_memoria02 alocacao de_memoria
02 alocacao de_memoria
 
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosTDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
 
3 oo-concepts
3 oo-concepts3 oo-concepts
3 oo-concepts
 
Introdução ao desenvolvimento de apps para Android - Dia 1/2
Introdução ao desenvolvimento de apps para Android - Dia 1/2Introdução ao desenvolvimento de apps para Android - Dia 1/2
Introdução ao desenvolvimento de apps para Android - Dia 1/2
 
Tdc2015 bigdata-mpias-final-pdf
Tdc2015 bigdata-mpias-final-pdfTdc2015 bigdata-mpias-final-pdf
Tdc2015 bigdata-mpias-final-pdf
 

Mehr von Frederico Maia Arantes

The best way to create and deploy web apps with full-stack type safety - Mete...
The best way to create and deploy web apps with full-stack type safety - Mete...The best way to create and deploy web apps with full-stack type safety - Mete...
The best way to create and deploy web apps with full-stack type safety - Mete...Frederico Maia Arantes
 
Produtividade e deploy na criação de apps NodeJS com MeteorJS - Join Communit...
Produtividade e deploy na criação de apps NodeJS com MeteorJS - Join Communit...Produtividade e deploy na criação de apps NodeJS com MeteorJS - Join Communit...
Produtividade e deploy na criação de apps NodeJS com MeteorJS - Join Communit...Frederico Maia Arantes
 
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!Frederico Maia Arantes
 
Apresentando meteor! Join Community - Goiânia
Apresentando meteor! Join Community - GoiâniaApresentando meteor! Join Community - Goiânia
Apresentando meteor! Join Community - GoiâniaFrederico Maia Arantes
 
Java 8 - Afinal onde usamos no dia a dia? TDC 2015 - Porto Alegre
Java 8 - Afinal onde usamos no dia a dia? TDC 2015 - Porto AlegreJava 8 - Afinal onde usamos no dia a dia? TDC 2015 - Porto Alegre
Java 8 - Afinal onde usamos no dia a dia? TDC 2015 - Porto AlegreFrederico Maia Arantes
 
Meteor - Nunca foi tão fácil desenvolver pra web e mobile
Meteor - Nunca foi tão fácil desenvolver pra web e mobileMeteor - Nunca foi tão fácil desenvolver pra web e mobile
Meteor - Nunca foi tão fácil desenvolver pra web e mobileFrederico Maia Arantes
 
Cloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineCloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineFrederico Maia Arantes
 
Visão Geral do Java para Iniciantes - FLISOL 2011
Visão Geral do Java para Iniciantes - FLISOL 2011Visão Geral do Java para Iniciantes - FLISOL 2011
Visão Geral do Java para Iniciantes - FLISOL 2011Frederico Maia Arantes
 
JSF 2 e Primefaces - 4º Encontro Mensal do Gojava
JSF 2 e Primefaces - 4º Encontro Mensal do GojavaJSF 2 e Primefaces - 4º Encontro Mensal do Gojava
JSF 2 e Primefaces - 4º Encontro Mensal do GojavaFrederico Maia Arantes
 

Mehr von Frederico Maia Arantes (12)

The best way to create and deploy web apps with full-stack type safety - Mete...
The best way to create and deploy web apps with full-stack type safety - Mete...The best way to create and deploy web apps with full-stack type safety - Mete...
The best way to create and deploy web apps with full-stack type safety - Mete...
 
Produtividade e deploy na criação de apps NodeJS com MeteorJS - Join Communit...
Produtividade e deploy na criação de apps NodeJS com MeteorJS - Join Communit...Produtividade e deploy na criação de apps NodeJS com MeteorJS - Join Communit...
Produtividade e deploy na criação de apps NodeJS com MeteorJS - Join Communit...
 
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
 
Apresentando meteor! Join Community - Goiânia
Apresentando meteor! Join Community - GoiâniaApresentando meteor! Join Community - Goiânia
Apresentando meteor! Join Community - Goiânia
 
Java 8 - Afinal onde usamos no dia a dia? TDC 2015 - Porto Alegre
Java 8 - Afinal onde usamos no dia a dia? TDC 2015 - Porto AlegreJava 8 - Afinal onde usamos no dia a dia? TDC 2015 - Porto Alegre
Java 8 - Afinal onde usamos no dia a dia? TDC 2015 - Porto Alegre
 
Meteor - Nunca foi tão fácil desenvolver pra web e mobile
Meteor - Nunca foi tão fácil desenvolver pra web e mobileMeteor - Nunca foi tão fácil desenvolver pra web e mobile
Meteor - Nunca foi tão fácil desenvolver pra web e mobile
 
Java Web Fácil com VRaptor
Java Web Fácil com VRaptorJava Web Fácil com VRaptor
Java Web Fácil com VRaptor
 
Java no Google App Engine - TDC2011
Java no Google App Engine - TDC2011Java no Google App Engine - TDC2011
Java no Google App Engine - TDC2011
 
Cloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineCloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App Engine
 
Visão Geral do Java para Iniciantes - FLISOL 2011
Visão Geral do Java para Iniciantes - FLISOL 2011Visão Geral do Java para Iniciantes - FLISOL 2011
Visão Geral do Java para Iniciantes - FLISOL 2011
 
JSF 2 e Primefaces - 4º Encontro Mensal do Gojava
JSF 2 e Primefaces - 4º Encontro Mensal do GojavaJSF 2 e Primefaces - 4º Encontro Mensal do Gojava
JSF 2 e Primefaces - 4º Encontro Mensal do Gojava
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 

Introdução à JPA e Hibernate

  • 1. Trilha – Java EE University Frederico Maia Arantes Desenvolvedor de Software / Instrutor / Empreendedor Globalcode – Open4education
  • 2. Introdução à JPA 2 e Hibernate Produtividade persistindo dados em Java Globalcode – Open4education
  • 3. Sobre mim Frederico Maia Arantes Globalcode – Open4education
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. Persistência de dados Globalcode – Open4education
  • 8. Persistência de dados Globalcode – Open4education
  • 9. 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
  • 10. Surge o Super Hibernate! Globalcode – Open4education
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. Inserindo dados sem JPA Globalcode – Open4education
  • 15. Inserindo dados com JPA Globalcode – Open4education
  • 16. Buscando dados sem JPA Globalcode – Open4education
  • 17. Buscando dados com JPA Globalcode – Open4education
  • 18. 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
  • 19. Classe Java comum Globalcode – Open4education
  • 20. Classe Java com JPA Globalcode – Open4education
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. Relacionamentos @Entity public class Carro { @OneToOne private Motor motor; } @Entity public class Motor { @OneToOne(mappedBy = “motor”) private Carro carro; } Globalcode – Open4education
  • 30. Estratégias de herança Um conceito um pouco complexo, a princípio, de se ̧ ̧ mapear é o de Heranca. A especificacão JPA define ̂ tres estratégia para realizar o mapeamento de ̧ heranca. Single Table Joined Table per Class Globalcode – Open4education
  • 31. Single Table A mais comum e a que possibilita melhor ̧ desempenho em relacão a velocidade das consultas. Será criada apenas uma tabela com o nome da super classe para armazenar os dados dos objetos. Globalcode – Open4education
  • 32. 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 às sub classes possuem chaves estrangeiras vinculadas à tabela correspondente à super classe. Globalcode – Open4education
  • 33. 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 operacões de join. A desvantagem é que não existe um vínculo explícito no banco de dados entres as tabelas. Globalcode – Open4education
  • 34. 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
  • 35. Dúvidas? Contatos fredericomaia10@gmail.com fredmaia fredericomaia10 Globalcode – Open4education