JPA - Java Persistence API

12.323 visualizações

Publicada em

Palestra básica sobre JPA apresentada aos desenvolvedores java da Universidade Metodista de São Paulo.

Publicada em: Tecnologia
0 comentários
36 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
12.323
No SlideShare
0
A partir de incorporações
0
Número de incorporações
287
Ações
Compartilhamentos
0
Downloads
12
Comentários
0
Gostaram
36
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

JPA - Java Persistence API

  1. 1. JPA Java Persistence API
  2. 2. Quem sou... <ul><li>Rodrigo Cascarrolho – “Casca”( [email_address] ) </li></ul><ul><li>Programador/Desenvolvedor Java </li></ul><ul><li>Bacharel em Ciência da Computação pela PUC-SP </li></ul><ul><li>Site: www.rdgc.com.br (???) </li></ul><ul><li>Hobby: www.flickr.com/photos/rdgcasca/ </li></ul>Slide / 20 28/11/2008 - 10:58
  3. 3. Problema x Solução <ul><li>Solução  ORM - Mapeamento Objeto / Relacional </li></ul><ul><ul><li>CoughPHP – ORM para PHP. </li></ul></ul><ul><ul><li>SQLObject – ORM para Python </li></ul></ul><ul><ul><li>Hibernate – ORM Java, da JBoss </li></ul></ul><ul><ul><li>TopLink – ORM Java, da Oracle </li></ul></ul><ul><ul><li>OJB – ORM Java, da Apache </li></ul></ul>Slide / 20 28/11/2008 - 10:58 <ul><li>Problema : </li></ul>Programação O.O. X Banco de Dados Relacional Java Tabelas Relacionadas Objetos Mapeamento O/R Interface BDR Tabelas Interface BDR
  4. 4. Sobre <ul><li>Java Persistence: </li></ul><ul><ul><li>JPA </li></ul></ul><ul><ul><li>Mapeamento Objeto/Relacional (ORM) </li></ul></ul><ul><ul><li>Query Language </li></ul></ul><ul><li>EJB 3.0 - JSR 220 - http://www.jcp.org/en/jsr/detail ? id=220 </li></ul><ul><li>Pacote: javax.persistence </li></ul><ul><li>Mapeamento por XML ou Annotation </li></ul><ul><li>Frameworks (Hibernate; TopLink; OpenJPA) </li></ul><ul><li>Pode ser utilizado fora de containers EJBs (ligthweigth container) </li></ul><ul><li>Uso de injeção de dependência ao invés de lookups JNDI </li></ul>Slide / 20 28/11/2008 - 10:58
  5. 5. Aplicação com JPA Slide / 20 28/11/2008 - 10:58 Aplicação Java JPA Provedor JPA (Hibernate, TopLink,...) Driver JDBC SGBDR API JDBC
  6. 6. Como acessamos o banco Slide / 20 28/11/2008 - 10:58 Mbean Facade Gerente DAO JPA ConectorLogos SAD SQL Mapper Mbean Facade Gerente JPA SIGA Praxis Injeção de dependência: JPA Injeção de dependência: JPA Transação Gerenciada JSP EJB 2.1 .java (Control) Executa Query BD SQL DisconnectedResultSet Logos BD BD
  7. 7. JPA – Java Persistence API <ul><li>Entity: POJO’s, suporta herança e polimorfismo; </li></ul><ul><li>EntityManager: responsável pelas operações de persistência de objetos; </li></ul><ul><li>PersistenceContext: área de memória que mantém os objetos que estão sendo manipulados pelo EntityManager; </li></ul><ul><li>Provedores: especificação para frameworks de persistência. </li></ul>Slide / 20 28/11/2008 - 10:58
  8. 8. Mapeamento <ul><li>Pode ser feito por metadados (xml) ou anotações (java5). </li></ul><ul><li>Usando anotações: </li></ul><ul><ul><li>@ Entity: entidade a ser persistida; </li></ul></ul><ul><ul><li>@ Table: especifica propriedades da tabela; </li></ul></ul><ul><ul><li>@ Column: especifica propriedades da coluna; </li></ul></ul><ul><ul><li>@ Id: chave primária; </li></ul></ul><ul><ul><li>@ NamedQuery: cria consultas estáticas; </li></ul></ul><ul><ul><li>@ GeneratedValue: gera id`s automaticamente; </li></ul></ul><ul><ul><li>@ Temporal: informações de tempo (Date, Time, etc); </li></ul></ul><ul><ul><li>@ OneToMany: relacionamento “um-para-muitos”; </li></ul></ul><ul><ul><li>@ ManyToOne: relacionamento “muitos-para-um”; </li></ul></ul><ul><ul><li>@ Version: controle de versão do objeto. </li></ul></ul>Slide / 20 28/11/2008 - 10:58
  9. 9. Exemplo – entidade ‘Carro’ Slide / 20 28/11/2008 - 10:58
  10. 10. Exemplo – entidade “Item” Slide / 20 28/11/2008 - 10:58
  11. 11. Persistence.xml <ul><li>META-INF/persistence.xml </li></ul>Slide / 20 28/11/2008 - 10:58
  12. 12. Relacionamentos <ul><li>Tipos: </li></ul><ul><ul><li>@MappedSuperClass </li></ul></ul><ul><ul><li>@Embedded </li></ul></ul><ul><ul><li>@Embeddable </li></ul></ul><ul><ul><li>@ManyToMany </li></ul></ul><ul><ul><li>@ManyToOne </li></ul></ul><ul><ul><li>@OneToMany </li></ul></ul><ul><ul><li>@OneToOne </li></ul></ul><ul><ul><li>@JoinTable </li></ul></ul><ul><ul><li>@JoinColumns </li></ul></ul><ul><ul><li>@JoinColumn </li></ul></ul><ul><ul><li>@MapKey </li></ul></ul>Slide / 20 28/11/2008 - 10:59 Entity: Carro Entity: Item
  13. 13. Configurações <ul><li>Configurações </li></ul><ul><ul><li>Cascade </li></ul></ul><ul><ul><ul><li>ALL </li></ul></ul></ul><ul><ul><ul><li>Merge </li></ul></ul></ul><ul><ul><ul><li>Persist </li></ul></ul></ul><ul><ul><ul><li>Refresh </li></ul></ul></ul><ul><ul><ul><li>Remove </li></ul></ul></ul><ul><ul><li>Fetch </li></ul></ul><ul><ul><ul><li>EAGER </li></ul></ul></ul><ul><ul><ul><li>LAZY </li></ul></ul></ul>Slide / 20 28/11/2008 - 10:59 Cuidado, seu objeto pode ficar gordo! Atenção, se a transação não estiver gerenciada, será necessário carregar os objetos “na mão”. Atenção!
  14. 14. Eager e Lazy Slide / 20 28/11/2008 - 10:59 Lazy Eager Lista não carregada ‘ Get’ não foi solicitado Lista carregada ‘ Get’ não foi solicitado Fetch = FetchType.EAGER; Fetch = FetchType.Lazy;
  15. 15. Manipulando Entity’s sem EJB <ul><li>Entity: Carro carro ; </li></ul><ul><li>EntityManagerFactory emf = Persistence. createEntityManagerFactory (&quot;apresentacaoJPA&quot;); </li></ul><ul><li>EntityManager em = emf .createEntityManager(); </li></ul><ul><li>EntityTransaction et = em .getTransaction(); </li></ul><ul><li>et .begin(); </li></ul><ul><ul><li>Insert: em .persist( carro ); </li></ul></ul><ul><ul><li>Update: em .merge( carro ); </li></ul></ul><ul><ul><li>Remove: em .remove( carro ); </li></ul></ul><ul><ul><li>Busca: em .find(Carro.class, id); </li></ul></ul><ul><li>et .commit(); ou et .rollback(); </li></ul>Slide / 20 28/11/2008 - 10:59
  16. 16. Manipulando Entity’s com EJB <ul><li>Entity: Carro carro ; </li></ul><ul><li>EntityManagerFactory emf = Persistence. createEntityManagerFactory (&quot;apresentacaoJPA&quot;); </li></ul><ul><li>@PersistenceContext </li></ul><ul><li>EntityManager em = emf.createEntityManager(); </li></ul><ul><li>EntityTransaction et = em.getTransaction(); </li></ul><ul><li>et.begin(); </li></ul><ul><ul><li>Insert: em .persist( carro ); </li></ul></ul><ul><ul><li>Update: em .merge( carro ); </li></ul></ul><ul><ul><li>Remove: em .remove( carro ); </li></ul></ul><ul><ul><li>Busca: em .find(Carro.class, id); </li></ul></ul><ul><li>et.commit(); ou et.rollback(); </li></ul>Injetado pelo conteiner EJB. Slide / 20
  17. 17. JPQL Java Persistence Query Language @ NamedQueries ({ @ NamedQuery ( name = &quot;Carro.getAll&quot;, query = &quot;select c from Carro c&quot; ), @ NamedQuery ( name = &quot;Carro.getCarro&quot;, query = &quot;select c from Carro c where c.id = :idCarro&quot; ) }) EntityManager em = getEntityManager(); Query query = em .createNamedQuery(“ Carro .getCarro&quot;); query .setParameter(“idCarro&quot;, id); return ( Carro ) query . getSingleResult() ; return query . getResultList( ) ; Podemos usar também: Group By, Having, Order By, Between, IN, Like, IS NULL, IS EMPTY, AND, >, <, JOIN Slide / 20 28/11/2008 - 10:59
  18. 18. Demonstração ... Slide / 20
  19. 19. Futuro – JPA 2.0 <ul><li>JPA 2.0 separado do  EJB 3.0; </li></ul><ul><li>Melhor suporte para classes “embedded”; </li></ul><ul><li>Suporte a validações (@Length(5), @Max(2) - JSR-303) ; </li></ul><ul><li>Suporte a coleções de tipos básicos (Set<String>) ; </li></ul><ul><li>Suporte a listas ordenadas; </li></ul><ul><li>Mapeamento @OneToMany vai ser obrigatoriamente “inverse” o que realmente faz mais sentido pela semântica do mapeamento; </li></ul><ul><li>No JPA 1.0 todas as consultas são polimorficas, no JPA 2.0 sera possivel especificar quando isto não é desejado. </li></ul><ul><li>Suporte a Criteria. </li></ul>Slide / 20 28/11/2008 - 10:59
  20. 20. Links <ul><li>Comparação entre persistência com EJB2.1 e EJB3.0 http://java.sun.com/developer/technicalArticles/J2EE/jpa/ </li></ul><ul><li>Tutorial Sun Persistence http://java.sun.com/javaee/technologies/persistence . jsp </li></ul><ul><li>TopLink http://www.oracle.com/technology/products/ias/toplink/jpa/index.html </li></ul><ul><li>JPQL http://java.sun.com/mailers/techtips/enterprise/2006/TechTips_Oct06.html </li></ul>Slide / 20 28/11/2008 - 10:59
  21. 21. Fim Slide / 21 28/11/2008 - 10:59 Obrigado!

×