Versão do Post[1.5]
Opa galera, tudo certo?
Bem.. vou fazer um CRUD basico com JPA2, ando estudando bastante sobre JPA2 e sinceramente.. gostei mais de brincar com ele do que o Hibernate em si (sei-la.. achei mais divertido), bem vamos la
Primeiro passo: Criar o JPAUtil no pacote br.com.lafleur.faroljava.infra
package br.com.lafleur.faroljava.infra
import javax.persistence.EntityManager
import javax.persistence.EntityManagerFactory
import javax.persistence.Persistence
public class JPAUtil{
private static EntityManagerFactory entityManagerFactory = Persistence.CreateEntityManagerFactory("controledecontas");
public EntityManager getEntityManager(){
return entityManagerFactory.createEntityManager();
}
}
Agora precisamos criar nosso DAO Generico
package br.com.lafleur.faroljava.DAO
import javax.persistence.EntityManager;
import java.util.List;
public class DAO<T>{
private final EntityManager em;
private final Class<T> classe;
public DAO(EntityManager em, Class<T> classe){
this.em = em;
this.classe = classe;
}
//Metodos de CRUD genericos
public T busca(Integer id){
return this.em.getReference(classe, id);
}
public List<T> lista(){
return em.createQuery("from " + classe.getName()).getResultLit();
}
public void adiciona(T t){
this.em.persist(t);
}
public void remove(T t){
this.em.remove(t);
}
}
Beleza, ja temos o JPAUtil e o DAO generico, no nosso pequeno projeto, vamos criar uma Conta, mas quais atributos uma conta normalmente tem ? Um titular, uma agencia, um numero e um banco.. coisas basicas por enquanto ^^.
Precisamos então criar nossa entitdade conta
package br.com.lafleur.faroljava.modelo
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Conta{
@GeneratedValue @Id
private Integer id;
private String titular;
private String agencia;
private String numero;
private String banco;
//Getters and Setters
}
E nossa ContaDAO no pacote br.com.lafleur.faroljava.dao
package br.com.lafleur.faroljava.dao.Conta
import javax.persistence.EntityManager;
import java.util.List;
import br.com.lafleur.faroljava.modelo.Conta;
public class ContaDAO{
private final DAO<Conta> dao;
private final EntityManager em;
public ContaDAO(EntityManager em({
this.dao = new DAO<Conta>(em, Conta.class);
this.em = em;
}
public void adiciona(Conta conta){
this.dao.adiciona(conta);
}
public void remove(Conta conta){
this.dao.remove(conta);
}
public List<Conta> lista(){
return this.dao.lista();
}
public Conta busca(Integer id){
return dao.busca(id);
}
}
Pra finalizar agente precisa ainda de duas coisas basicas, primeira, a nossa classe de testes
e segundo nosso persistence.xml, o persistence.xml seria a mesma coisa que o hibernate.cfg.xml.
Criando o persistence.xml: O “diferente” do persistence.xml é que ele ao inves de ficar na pasta src como o hibernate.cfg ele fica na META-INF dentro de src.
Beleza, vamos criar o persistence.xml
<pre><persistence 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/persistence_2_0.xsd" version="2.0"> // Passamos o persistence-unit no EntityManagerFactory do JPAUtil <persistence-unit name="controledecontas"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>br.com.lafleur.faroljava.modelo.Conta</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/Faroljava" /> <property name="javax.persistence.jdbc.user" value="root" /> <property name="javax.persistence.jdbc.password" value="UseSeuPassword" /> </properties> </persistence-unit> </persistence>
Pronto nosso persistence.xml foi criado dentro de META-INF da pasta src.
E nossa ContaDAO no pacote br.com.lafleur.faroljava.dao
Não esquecam de criar um FOLDER dentro do src e nomea-lo META-INF
package br.com.lafleur.faroljava.teste;
import javax.persistence.EntityManager;
import br.com.lafleur.faroljava.dao.ContaDAO;
import br.com.lafleur.faroljava.infra.JPAUtil;
import br.com.lafleur.faroljava.modelo.Conta;
public class InsereContaTestDriver{
public static void main(String arg[]){
EntityManager em = new JPAUtil().getEntityManager();
ContaDAO dao = new ContaDAO(em);
Conta c = new Conta();
c.setAgencia("Itau");
c.setBanco("Itau");
c.setNumero("7777-7");
c.setTitular("Max Mustang");
c.setBanco("7777");
em.getTransaction().begin();
dao.adiciona(c);
em.getTransaction().commit();
}
}
Pronto, ja temos um insert com JPA2, para os proximos post vamos implementar os outros metodos o/
Jesus Love you <3
Pingback: Login com JSF2 « Farol Java
Muito bom, e as outras partes
legal, mas o entity manager nao poderia ficar no DAO ? Assim nao seria necessário criá-lo em cada tabela do modelo.