Boa tarde. Alguém trabalha ou tem algum código para indicar de como posso fazer um Dao generico que sirva para persistência de todas as classes do projeto? Ela seria um padrão de projeto. Aguardo retorno.
Boa tarde. Alguém trabalha ou tem algum código para indicar de como posso fazer um Dao generico que sirva para persistência de todas as classes do projeto? Ela seria um padrão de projeto. Aguardo retorno.
Oi Cesar,
Geralmente é feito algo assim:
public class Dao<T> {
private EntityManager em;
private Class classe;
public Dao(EntityManager em, Class classe) {
this.em = em;
this.classe = classe;
}
public void cadastrar(T t) {
this.em.persist(t);
}
public void atualizar(T t) {
this.em.merge(t);
}
public void remover(T t) {
t = em.merge(t);
this.em.remove(t);
}
public T buscarPorId(Long id) {
return em.find(classe, id);
}
}
E para utilizar:
Dao<Produto> produtoDao = new Dao(em, Produto.class);
Dao<Categoria> categoriaDao = new Dao(em, Categoria.class);
Bons estudos!
Fala Rodrigo. Obrigado pelo retorno. Já vi um DAO desse. Mas tenho dúvidas ainda quanto aos métodos de transição, como begin() commit() e close(). Como ficaria? Eu coloco eles em cada método: cadastrar, atualizar e remover?
No geral isso é feito fora da classe Dao, ou seja, na classe que está utilizando a classe Dao.
EntityManager em = factory.createEntityManager();
Dao<Produto> produtoDao = new Dao(em, Produto.class);
em.getTransaction().begin();
Produto p1 = new Produto("Celular", new BigDecimal(900.00));
Produto p2 = new Produto("Computador", new BigDecimal(3500.00));
produtoDao.cadastrar(p1);
produtoDao.cadastrar(p2);
em.getTransaction().commit();
em.close();
Mas em projeto você não vai precisar se preocupar com isso, pois é bem provável que utilize algum framework, com o Spring, que já cuida automaticamente das transações pra você :)
Bons estudos!
No caso o Hibernate para JSF. Vlw Rodrigo.