如何设计DAO,REST服务层

时间:2017-07-08 18:11:24

标签: java rest jpa design-patterns dao

我正在研究REST和JPA技术,并希望一般地设计Service和Dao层。 我想遵循每层的解耦规则。因此,在将来的任何时间点,如果需要,可以更改这些层而无需进行太多修改。所以为了对DAO层做同样的事情,我遵循工厂模式。

请看看我到目前为止所做的事情。

Folder Structure

'Abstract Entity'

enter image description here

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层。

enter image description here

这就是我访问服务层上的DAO层的方式。但我再次考虑采用其他更好的方式来访问这个DAO层。 还有一件事我想问一下,如果我引入业务层并按照这样做,那将是个好主意。

客户 - &gt;服务层 - &gt;业务层 - &gt; DAO层

有人可以帮我设计不同的项目层。

提前致谢。

1 个答案:

答案 0 :(得分:-2)

请使用这种类型的目录结构:

enter image description here

使用Spring框架并使用Spring Restful服务注释,例如请参考以下链接:

https://dzone.com/articles/exporting-spring-data-jpa