• Save
JPA - Java Persistence API
Upcoming SlideShare
Loading in...5
×
 

JPA - Java Persistence API

on

  • 16,600 views

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

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

Statistics

Views

Total Views
16,600
Views on SlideShare
16,329
Embed Views
271

Actions

Likes
34
Downloads
12
Comments
0

6 Embeds 271

http://blog.rdgc.com.br 181
http://www.slideshare.net 83
http://www.techgig.com 4
http://115.112.206.131 1
http://www.slideee.com 1
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

JPA - Java Persistence API JPA - Java Persistence API Presentation Transcript

  • JPA Java Persistence API
  • Quem sou...
    • Rodrigo Cascarrolho – “Casca”( [email_address] )
    • Programador/Desenvolvedor Java
    • Bacharel em Ciência da Computação pela PUC-SP
    • Site: www.rdgc.com.br (???)
    • Hobby: www.flickr.com/photos/rdgcasca/
    Slide / 20 28/11/2008 - 10:58
  • Problema x Solução
    • Solução  ORM - Mapeamento Objeto / Relacional
      • CoughPHP – ORM para PHP.
      • SQLObject – ORM para Python
      • Hibernate – ORM Java, da JBoss
      • TopLink – ORM Java, da Oracle
      • OJB – ORM Java, da Apache
    Slide / 20 28/11/2008 - 10:58
    • Problema :
    Programação O.O. X Banco de Dados Relacional Java Tabelas Relacionadas Objetos Mapeamento O/R Interface BDR Tabelas Interface BDR
  • Sobre
    • Java Persistence:
      • JPA
      • Mapeamento Objeto/Relacional (ORM)
      • Query Language
    • EJB 3.0 - JSR 220 - http://www.jcp.org/en/jsr/detail ? id=220
    • Pacote: javax.persistence
    • Mapeamento por XML ou Annotation
    • Frameworks (Hibernate; TopLink; OpenJPA)
    • Pode ser utilizado fora de containers EJBs (ligthweigth container)
    • Uso de injeção de dependência ao invés de lookups JNDI
    Slide / 20 28/11/2008 - 10:58
  • Aplicação com JPA Slide / 20 28/11/2008 - 10:58 Aplicação Java JPA Provedor JPA (Hibernate, TopLink,...) Driver JDBC SGBDR API JDBC
  • 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
  • JPA – Java Persistence API
    • Entity: POJO’s, suporta herança e polimorfismo;
    • EntityManager: responsável pelas operações de persistência de objetos;
    • PersistenceContext: área de memória que mantém os objetos que estão sendo manipulados pelo EntityManager;
    • Provedores: especificação para frameworks de persistência.
    Slide / 20 28/11/2008 - 10:58
  • Mapeamento
    • Pode ser feito por metadados (xml) ou anotações (java5).
    • Usando anotações:
      • @ Entity: entidade a ser persistida;
      • @ Table: especifica propriedades da tabela;
      • @ Column: especifica propriedades da coluna;
      • @ Id: chave primária;
      • @ NamedQuery: cria consultas estáticas;
      • @ GeneratedValue: gera id`s automaticamente;
      • @ Temporal: informações de tempo (Date, Time, etc);
      • @ OneToMany: relacionamento “um-para-muitos”;
      • @ ManyToOne: relacionamento “muitos-para-um”;
      • @ Version: controle de versão do objeto.
    Slide / 20 28/11/2008 - 10:58
  • Exemplo – entidade ‘Carro’ Slide / 20 28/11/2008 - 10:58
  • Exemplo – entidade “Item” Slide / 20 28/11/2008 - 10:58
  • Persistence.xml
    • META-INF/persistence.xml
    Slide / 20 28/11/2008 - 10:58
  • Relacionamentos
    • Tipos:
      • @MappedSuperClass
      • @Embedded
      • @Embeddable
      • @ManyToMany
      • @ManyToOne
      • @OneToMany
      • @OneToOne
      • @JoinTable
      • @JoinColumns
      • @JoinColumn
      • @MapKey
    Slide / 20 28/11/2008 - 10:59 Entity: Carro Entity: Item
  • Configurações
    • Configurações
      • Cascade
        • ALL
        • Merge
        • Persist
        • Refresh
        • Remove
      • Fetch
        • EAGER
        • LAZY
    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!
  • 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;
  • Manipulando Entity’s sem EJB
    • Entity: Carro carro ;
    • EntityManagerFactory emf = Persistence. createEntityManagerFactory ("apresentacaoJPA");
    • EntityManager em = emf .createEntityManager();
    • EntityTransaction et = em .getTransaction();
    • et .begin();
      • Insert: em .persist( carro );
      • Update: em .merge( carro );
      • Remove: em .remove( carro );
      • Busca: em .find(Carro.class, id);
    • et .commit(); ou et .rollback();
    Slide / 20 28/11/2008 - 10:59
  • Manipulando Entity’s com EJB
    • Entity: Carro carro ;
    • EntityManagerFactory emf = Persistence. createEntityManagerFactory ("apresentacaoJPA");
    • @PersistenceContext
    • EntityManager em = emf.createEntityManager();
    • EntityTransaction et = em.getTransaction();
    • et.begin();
      • Insert: em .persist( carro );
      • Update: em .merge( carro );
      • Remove: em .remove( carro );
      • Busca: em .find(Carro.class, id);
    • et.commit(); ou et.rollback();
    Injetado pelo conteiner EJB. Slide / 20
  • 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
  • Demonstração ... Slide / 20
  • Futuro – JPA 2.0
    • JPA 2.0 separado do  EJB 3.0;
    • Melhor suporte para classes “embedded”;
    • Suporte a validações (@Length(5), @Max(2) - JSR-303) ;
    • Suporte a coleções de tipos básicos (Set<String>) ;
    • Suporte a listas ordenadas;
    • Mapeamento @OneToMany vai ser obrigatoriamente “inverse” o que realmente faz mais sentido pela semântica do mapeamento;
    • No JPA 1.0 todas as consultas são polimorficas, no JPA 2.0 sera possivel especificar quando isto não é desejado.
    • Suporte a Criteria.
    Slide / 20 28/11/2008 - 10:59
  • Links
    • Comparação entre persistência com EJB2.1 e EJB3.0 http://java.sun.com/developer/technicalArticles/J2EE/jpa/
    • Tutorial Sun Persistence http://java.sun.com/javaee/technologies/persistence . jsp
    • TopLink http://www.oracle.com/technology/products/ias/toplink/jpa/index.html
    • JPQL http://java.sun.com/mailers/techtips/enterprise/2006/TechTips_Oct06.html
    Slide / 20 28/11/2008 - 10:59
  • Fim Slide / 21 28/11/2008 - 10:59 Obrigado!