Arquivo
Archive for the ‘Persistência’ Category
Generic Data Access Object com Eclipse Link
julho 18, 2011
Deixe um comentário
Olá, nesse post estará um código fonte de um Generic DAO utilizando a biblioteca de persistência Eclipse Link (somente o código da classe Generic DAO, não entrarei nos detalhes de configuração da conexão com banco de dados).
É possível realizar o download da biblioteca em: EclipseLink Home
O mais importante antes de construir o DAO Genérico, é ter conhecimento sobre Generics e Java Reflection, pois apresentam-se dois problemas:
- Tipo dos parâmetros nos métodos: por exemplo no método inserir, você deve passar um objeto do tipo da entidade que se deseja adicionar;
- Obter classe da entidade: por exemplo no get você precisa saber qual o tipo da entidade a ser retornada;
Para resolver o primeiro utilizamos Generics, que permite passar o tipo no construtor, permite que ela receba qualquer tipo (exceto os primários).
E o segundo utilizamos o Java Reflection, a partir da classe Class, que permite armazenar informações sobre qualquer classe Java.
Eis o código do DAO Genérico:
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
public class GenericDAO <T>{
/*cria um gerenciador de entidades, a partir da fábrica de gerenciadores de entidade
Obs: não utilizar static, pois pode gerar problemas em relacionamentos Many-To-Many */
private EntityManager em = Persistence.createEntityManagerFactory("UP").createEntityManager();
//Atributo do tipo classe utilizado no Java Reflection
private Class classe;
public GenericDAO(Class classe) {
//faz o atributo classe receber a classe da entidade, que deve ser passada no construtor
this.classe = classe;
}
//Método para inserir um registro no banco de dados a partir de um objeto
public void insert(T entidade){
em.getTransaction().begin();
em.persist(entidade);
em.getTransaction().commit();
}
//Método para atualizar um registro no banco de dados a partir de um objeto
public void update(T entidade){
em.getTransaction().begin();
em.merge(entidade);
em.getTransaction().commit();
}
//Método para obter um registro no banco de dados a partir de um id
public T get(int id){
return (T)em.find(classe, id);
}
//Método para remover um registro no banco de dados a partir de um id
public void remove(int id){
T entidade = get(id);
if(entidade!=null){
em.getTransaction().begin();
em.remove(entidade);
em.getTransaction().commit();
}
}
//Retorna todos os registros no banco de dados da tabela equivalente a entidade passada por parâmetro
public List<T> list(){
return em.createQuery("SELECT e FROM " + classe.getSimpleName() + " e").getResultList();
}
}
Categorias:Java, Persistência
DAO, DAO Genérico, EclipseLink, Generic DAO, Java, JPA, Mapeamento Objeto Relacional, Persistência