Arquivo
Posts Tagged ‘Generic DAO’
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