Pro030 - Aula 3 Tap

download Pro030 - Aula 3 Tap

of 8

Transcript of Pro030 - Aula 3 Tap

  • 8/3/2019 Pro030 - Aula 3 Tap

    1/8

    Tpicos Avanados de Programao - Ano:2011 Prof.Fbio Rener

    INTRODUO A JPA ARQUITETURA E CONCEITOS.

    A Java Persistence API (JPA) a especificao para persistncia de objetos Java

    para bancos de dados relacionais usando a popular tecnologia de mapeamento objetorelacional (ORM). Aproveitando JSR 220 (Enterprise JavaBeans ou EJB 3.0), JPAfornece um padro baseado em POJO e ORM para persistncia de dados entreaplicaes Java. JPA baseia-se em idias, conceitos e padres de frameworks depersistncia lderes como TopLink, Hibernate e Java Data Objects (JDO).

    Um dos grandes benefcios do JPA que uma API independente e pode muito bemintegrar-se com Java EE, bem como aplicaes Java SE. JPA usa metadados paramapear objetos de persistncia para tabelas de banco de dados, e suporta umalinguagem de consulta SQL-like para facilitar o processo de consultar o banco dedados. A linguagem de consulta JPA pode ser usada para executar as duas consultas

    estticas e dinmicas.

    Vamos apresentar JPA listando seus benefcios e arquitetura e, em seguida, usandouma demonstrao de Entity e persistence.xml para explicar como ele funciona ecomo implement-lo.

    O que so POJOS

    POJO - Plain Old Java Object um termo usado para se referir objetos Java que no

    precisam estender ou implementar classes especializadas. Portanto, todos os objetosJava normais so POJO.

    Os benefcios da JPA

    JPA exige menos classes e interfaces do que solues mais velhas, praticamenteelimina os descritores de implementao usando anotaes (Annotations). Eletambm elimina a necessidade de cdigo de pesquisa e utiliza injeo dedependncia. A seguir esto os principais benefcios do JPA.

    Simplicidade na tecnologia para persistncia;

    Independncia de frameworks ORM;

    Apoiado por lderes da indstria;

    Java fornece uma linguagem de consulta - Um avanado EJB QL.

    1

  • 8/3/2019 Pro030 - Aula 3 Tap

    2/8

    Tpicos Avanados de Programao - Ano:2011 Prof.Fbio Rener

    Arquitetura JPA

    Entity;

    EntityManager;

    EntityManagerFactory.

    Entity

    Entidade o objeto de persistncia (POJO) que representa um registro na tabela debanco de dados. A Entidade uma classe POJO com anotao simples. Aqui esto ascaractersticas de uma entidade:

    Uma entidade pode ser persistida no banco de dados relacional. Uma entidade identificada por uma identidade de persistncia (isto , a chave

    primria da tabela).

    Entidade oferece suporte a transaes.

    Entidade oferece suporte herana.

    2

  • 8/3/2019 Pro030 - Aula 3 Tap

    3/8

    Tpicos Avanados de Programao - Ano:2011 Prof.Fbio Rener

    EntityManager

    A interface EntityManager fornece a API para interagir com a Entidades. Algumas dasfunes fornecidas pelo EntityManager API so:

    persist - Este mtodo usado para salvar uma nova entidade.

    merge - Este mtodo usado para atualizar o estado de uma entidade nobanco de dados.

    remove - Este mtodo usado para remover a instncia da entidade.

    EntityManagerFactory

    O EntityManagerFactory usado para criar uma instncia de EntityManager.

    Como implementar JPA

    Vamos examinar como JPA funciona examinando a persistncia de uma entidade emum banco de dados. Precisamos de trs artefatos para implementar o programa JPA:

    Uma classe de entidade

    Um arquivo persistence.xml (Persistence Unit)

    A classe (ou cliente) atravs do qual inserir, atualizar ou encontrar umaentidade.

    A tabela a seguir lista o esquema da tabela CLIENTE.

    NOME CHAVE PRIMARIA TIPO NULL?

    CLIENTE_ID S NUMBER NOT NULL

    NOME VARCHAR2(50) NOT NULL

    SOBRENOME VARCHAR2(50)

    RUA VARCHAR2(50)

    CIDADE VARCHAR2(50)

    CEP VARCHAR2(10) NOT NULL

    DT_ATUALIZACAO TIMESTAMP

    3

  • 8/3/2019 Pro030 - Aula 3 Tap

    4/8

    Tpicos Avanados de Programao - Ano:2011 Prof.Fbio Rener

    Escrevendo um Entity

    package br.com.uniban.tap.persistence;

    import java.io.Serializable;import java.util.Date;

    import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;

    @Entity@Table(name="CLIENTE")publicclass Cliente implements Serializable {

    /****/

    privatestaticfinallongserialVersionUID= 4053745350037973866L;

    @Id@Column(name = "CLIENTE_ID", nullable = false)

    @GeneratedValue(strategy = GenerationType.AUTO)privatelongclienteId;

    @Column(name = "NOME", nullable = false,length = 50)private String nome;

    @Column(name = "SOBRENOME", length = 50)private String sobreNome;

    @Column(name = "RUA", length = 50)private String rua;

    @Column(name = "CIDADE", length = 50)private String cidade;

    @Column(name = "CEP",nullable = false)private String cep;

    @Version@Column(name = "DT_ATUALIZACAO")private Date updatedTime;

    publiclong getClienteId() {returnclienteId;

    }

    publicvoid setClienteId(long clienteId) {this.clienteId = clienteId;

    }

    public String getNome() {returnnome;

    }

    publicvoid setNome(String nome) {this.nome = nome;

    }

    public String getSobreNome() {returnsobreNome;

    }

    publicvoid setSobreNome(String sobreNome) {

    4

  • 8/3/2019 Pro030 - Aula 3 Tap

    5/8

    Tpicos Avanados de Programao - Ano:2011 Prof.Fbio Rener

    this.sobreNome = sobreNome;}

    public String getRua() {returnrua;

    }

    publicvoid setRua(String rua) {this.rua = rua;

    }

    public String getCidade() {returncidade;

    }

    publicvoid setCidade(String cidade) {this.cidade = cidade;

    }

    public String getCep() {returncep;

    }

    publicvoid setCep(String cep) {this.cep = cep;

    }

    public Date getUpdatedTime() {returnupdatedTime;

    }

    publicvoid setUpdatedTime(Date updatedTime) {this.updatedTime = updatedTime;

    }

    }

    As anotaes presentes no exemplo fazem parte do pacote javax.persistence. A tabelaabaixo descreve o significado das anotaes.

    Annotation Descrio

    @Entity Essa anotao significa que uma determinada classe uma classe de entidade. Se onome da entidade diferente do nome da tabela, ento a anotao @ Table usada.Caso contrrio, no necessria.

    @Column Essa anotao fornece o nome da coluna na tabela, se for diferente do nome do atributo.

    Por padro, os dois nomes so considerados o mesmo.@Id Significa a chave primria.

    @Version Essa anotao significa um campo de verso em uma entidade. JPA usa um campo deverso para detectar modificaes simultneas para um registro armazenado.

    @GeneratedValue Essa anotao significa uma estratgia para atribuir um valor nico para os nossoscampos de identidade automaticamente. Os tipos de estratgias disponveis soIDENTITY, SEQUENCE, TABLE e AUTO. A estratgia padro AUTO, cuja execuo ficaa cargo do fornecedor JPA.

    5

  • 8/3/2019 Pro030 - Aula 3 Tap

    6/8

    Tpicos Avanados de Programao - Ano:2011 Prof.Fbio Rener

    Criando e configurando sua unidade de persistncia (persistence.xml)

    Unidade de persistncia configurado em um arquivo XML colocado na pasta META-INF. Usado para especificar o nome do provedor de persistncia, os nomes dasentidades, e propriedades como a URL de conexo do banco de dados, driver,

    usurio, senha e assim por diante.

    org.hibernate.ejb.HibernatePersistence

    br.com.uniban.tap.persistence.Cliente

    Na prxima aula veremos mais sobre as anotaes que usaremos em nossasentidades e um exemplo de cliente que faz a incluso e consulta no banco de dados.

    6

  • 8/3/2019 Pro030 - Aula 3 Tap

    7/8

    Tpicos Avanados de Programao - Ano:2011 Prof.Fbio Rener

    Exerccios de Fixao:

    1) O que significa JPA ?

    2) O que um POJO ?

    3) Lista dois benefcios que temos ao usar JPA ?

    4) Para que serve o EntityManager e quais as principais funes ?

    7

  • 8/3/2019 Pro030 - Aula 3 Tap

    8/8

    Tpicos Avanados de Programao - Ano:2011 Prof.Fbio Rener

    5) O que o arquivo persistence.xml

    8