I've found a couple of very good articles with a simple code samples and clear explanations. They both talk about service/DAO layer organization.
To be more precise, the first one is about Generic DAO pattern that I personally prefer (but it could be just as well applied on the service layer).
1) Generic DAO pattern in Java with Spring 3 and JPA 2.0 (Code Project article by Madalin Ilie)
And the second one explains the difference between DAO and service layer, and where and how do we make the cut between them.
2) Layered architecture with Hibernate and Spring 3 (Carlos Vara's blog post)
A small addition on my side would be a sample of Madalin's Generic DAO pattern applied on DAO classes provided by Carlos + using JPA instead of Hibernate:
To be more precise, the first one is about Generic DAO pattern that I personally prefer (but it could be just as well applied on the service layer).
1) Generic DAO pattern in Java with Spring 3 and JPA 2.0 (Code Project article by Madalin Ilie)
And the second one explains the difference between DAO and service layer, and where and how do we make the cut between them.
2) Layered architecture with Hibernate and Spring 3 (Carlos Vara's blog post)
A small addition on my side would be a sample of Madalin's Generic DAO pattern applied on DAO classes provided by Carlos + using JPA instead of Hibernate:
@Repository public class GenericDaoImpl<T> implements GenericDao<T> { private Class<T> type; @PersistenceContext EntityManager em; public void setEntityManager(EntityManager em) { this.em = em; } public GenericDaoImpl() { Type t = getClass().getGenericSuperclass(); ParameterizedType pt = (ParameterizedType) t; this.type = (Class) pt.getActualTypeArguments()[0]; } @Transactional public T findById(String id) { return em.find(type, id); } @Transactional public T save(T entity) { if (((BaseEntity)entity).getId() != null) { entity = em.merge(entity); // update } else { em.persist(entity); // insert } return entity; } }
Excellent!
ReplyDelete