JPA

19
JPA Marco Antonio Software Architect Agosto - 2008

description

Marco Antonio Software Architect Agosto - 2008. JPA. Java Persistence API. Framework utilizado na camada de persistência para o desenvolvedor ter mais produtividade. - PowerPoint PPT Presentation

Transcript of JPA

Page 1: JPA

JPAMarco AntonioSoftware Architect Agosto - 2008

Page 2: JPA

Java Persistence API• Framework utilizado na camada de

persistência para o desenvolvedor ter mais produtividade.

• JPA define um caminho para mapear POJO’s para um banco de dados. POJO’s são chamados beans de entidade, pois têm uma tabela correspondente no BD.

Page 3: JPA

Bibliotecas• Ao lado você pode conferir

as lib’s necessárias para utilizar o JPA

Page 4: JPA

hibernate.cfg.xml<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property><property name="connection.driver_class">org.postgresql.Driver</property><property name="connection.url">jdbc:postgresql://localhost:5432/SCA</property><property name="connection.username">postgres</property><property name="connection.password">postgres</property><property name="show_sql">true</property><property name="hibernate.format_sql">true</property><property name="hibernate.hbm2ddl.auto">update</property><property name="hibernate.cglib.use_reflection_optimizer" /></session-factory></hibernate-configuration>

Page 5: JPA

hibernate.cfg.xml• Essa nova versão do arquivo de

configuração elimina a necessidade do hibernate.properties.

• Todas as propriedades de conexão devem ficar aqui.

• Deve estar no diretório META-INF

Page 6: JPA

EmpresaAereapackage net.sca.entidades;

import javax.persistence.*;

/** * Essa classe representa uma Empresa Aérea no Domínio * Sistema de Controle Aéreo * @category A categoria dessa classe é domínio * @author T313120 * */@Entitypublic class EmpresaAerea { private Long id; private String nomeFantasia; private String razaoSocial;

Page 7: JPA

EmpresaAerea @Id @GeneratedValue(strategy = GenerationType.AUTO) public Long getId() { return id; }

public void setId(Long id) { this.id = id; }

@Column public String getNomeFantasia() { return nomeFantasia; }

Page 8: JPA

EmpresaAerea public void setNomeFantasia(String nomeFantasia) { this.nomeFantasia = nomeFantasia; }

@Column public String getRazaoSocial() { return razaoSocial; }

public void setRazaoSocial(String razaoSocial) { this.razaoSocial = razaoSocial; }}

Page 9: JPA

persistence.xml<?xml version="1.0" encoding="UTF-8"?><persistence version="1.0“ xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistence

http://java.sun.com/xml/ns/persistence/per...0.xsd"><persistence-unit name="sca-pu" transaction-type="JTA"><provider>org.hibernate.ejb.HibernatePersistence</provider><properties><property name="hibernate.ejb.cfgfile“ value="/META-INF/hibernate.cfg.xml" /></properties></persistence-unit></persistence>

Page 10: JPA

persistence.xml• Esse arquivo fica no diretório src/META-INF.• Estamos configurando o JPA para trabalhar

com o hibernate.

Page 11: JPA

Classes genéricas• DAO que realiza diversas tarefas da

persistência. • A principal vantagem é que diminui

sensivelmente a quantidade de código dos DAO’s específicos.

• Com a utilização de genéricos, conseguimos especializar com eficiência todos os DAO’s do sistema.

Page 12: JPA

DAOGenericoJPApackage net.sca.persistencia;

import java.lang.reflect.*;import java.util.*;

import javax.persistence.*;

public class DAOGenericoJPA<T> { private EntityManager em; private EntityManagerFactory emf;

public DAOGenericoJPA() { emf = Persistence.createEntityManagerFactory("sca-pu", new HashMap()); em = emf.createEntityManager(); }

@SuppressWarnings("unchecked") protected Class<T> getClasse() { Class<T> classe = null; ParameterizedType pt = (ParameterizedType) ((Class<?>) getClass()) .getGenericSuperclass(); classe = (Class<T>) pt.getActualTypeArguments()[0]; return classe; }

Page 13: JPA

DAOGenericoJPA public void inserir(T objeto) { em.getTransaction().begin(); em.persist(objeto); em.getTransaction().commit(); }

public void atualizar(T objeto) { em.getTransaction().begin(); em.persist(objeto); em.getTransaction().commit(); }

public T consultarPeloId(Long id) { return em.find(getClasse(), id); }

Page 14: JPA

DAOGenericoJPA public List<T> consultarTodos() { String sql = "SELECT C FROM " + getClasse().getName() + " C "; return em.createQuery(sql).getResultList(); }

//A classe de entidade deve ter o findAll public List consultarTodosNamedQuery() { return em.createNamedQuery("findAll").getResultList(); }

public void excluir(T objeto) { em.getTransaction().begin(); em.remove(objeto); em.getTransaction().commit(); }}

Page 15: JPA

DAOEmpresaAereapackage net.sca.persistencia;

import net.sca.entidades.*;

public class DAOEmpresaAerea extends DAOGenericoJPA<EmpresaAerea> {

}

Page 16: JPA

TesteInsertpackage net.sca.entidades.teste;

import net.sca.entidades.*;import net.sca.persistencia.*;

public class TesteInsertEmpresa { public static void main(String[] args) { EmpresaAerea e = new EmpresaAerea(); DAOEmpresaAerea dao = new DAOEmpresaAerea(); e.setNomeFantasia("TAM"); e.setRazaoSocial("Transporte Aereo Marilia"); dao.inserir(e); }}

Page 17: JPA

TesteLoadpackage net.sca.entidades.teste;

import java.util.*;

import net.sca.entidades.*;import net.sca.persistencia.*;

public class TesteLoad { public static void main(String[] args) { DAOEmpresaAerea d = new DAOEmpresaAerea(); List<EmpresaAerea> lista = d.consultarTodos(); for (EmpresaAerea ea : lista) { System.out.println(ea.getId()); System.out.println(ea.getNomeFantasia()); } }}

Page 18: JPA

Aeronavepackage net.sca.entidades;

import javax.persistence.*;

@Entitypublic class Aeronave { private Long id; private EmpresaAerea empresaAerea; private String modelo; private Integer quantidadeDeAssentos;

@ManyToOne public EmpresaAerea getEmpresaAerea() { return empresaAerea; }

public void setEmpresaAerea(EmpresaAerea empresaAerea) { this.empresaAerea = empresaAerea; }

Page 19: JPA

Aeronave @Column public String getModelo() { return modelo; }

public void setModelo(String modelo) { this.modelo = modelo; }

@Column public Integer getQuantidadeDeAssentos() { return quantidadeDeAssentos; }

public void setQuantidadeDeAssentos(Integer quantidadeDeAssentos) { this.quantidadeDeAssentos = quantidadeDeAssentos; }

@Id @GeneratedValue(strategy=GenerationType.AUTO) public Long getId() { return id; }

public void setId(Long id) { this.id = id; }}