我正在研究REST和JPA技术,并希望一般地设计Service和Dao层。 我想遵循每层的解耦规则。因此,在将来的任何时间点,如果需要,可以更改这些层而无需进行太多修改。所以为了对DAO层做同样的事情,我遵循工厂模式。
请看看我到目前为止所做的事情。
public abstract class AbstractDao {
@PersistenceUnit(name = "Services")
private EntityManagerFactory factory;
public AbstractDao() {
this.factory = Persistence.createEntityManagerFactory("Services");
}
public void save(AbstractEntity entity) {
EntityManager em = getEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(entity);
tx.commit();
}
public void delete(AbstractEntity entity) {
getEntityManager().remove(entity);
}
public List<AbstractEntity> findAll() {
CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
CriteriaQuery<AbstractEntity> cq = cb.createQuery(AbstractEntity.class);
Root<AbstractEntity> from = cq.from(AbstractEntity.class);
cq.select(from);
TypedQuery<AbstractEntity> q = getEntityManager().createQuery(cq);
List<AbstractEntity> allitems = q.getResultList();
return allitems;
}
private EntityManager getEntityManager() {
EntityManager em = factory.createEntityManager();
return em;
}
}
所以这就是我用于DAO层的设计。但不确定它是正确的方法,还是像AbstractFactory模式等更好。
现在来到REST服务层,我在这里访问CRUD的这个DAO层。
这就是我访问服务层上的DAO层的方式。但我再次考虑采用其他更好的方式来访问这个DAO层。 还有一件事我想问一下,如果我引入业务层并按照这样做,那将是个好主意。
客户 - &gt;服务层 - &gt;业务层 - &gt; DAO层
有人可以帮我设计不同的项目层。
提前致谢。
答案 0 :(得分:-2)
请使用这种类型的目录结构:
使用Spring框架并使用Spring Restful服务注释,例如请参考以下链接: