JPA
description
Transcript of JPA
JPAMarco AntonioSoftware Architect Agosto - 2008
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.
Bibliotecas• Ao lado você pode conferir
as lib’s necessárias para utilizar o 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>
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
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;
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; }
EmpresaAerea public void setNomeFantasia(String nomeFantasia) { this.nomeFantasia = nomeFantasia; }
@Column public String getRazaoSocial() { return razaoSocial; }
public void setRazaoSocial(String razaoSocial) { this.razaoSocial = razaoSocial; }}
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>
persistence.xml• Esse arquivo fica no diretório src/META-INF.• Estamos configurando o JPA para trabalhar
com o hibernate.
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.
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; }
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); }
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(); }}
DAOEmpresaAereapackage net.sca.persistencia;
import net.sca.entidades.*;
public class DAOEmpresaAerea extends DAOGenericoJPA<EmpresaAerea> {
}
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); }}
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()); } }}
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; }
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; }}