【发布时间】:2013-07-28 13:09:45
【问题描述】:
我从 spring、hibernate、maven、jpa、springMVC 开始我的大型应用程序。 目前我有 30 节课。 (每个类都有接口,我们有 60 个类) 我有两个包裹。 (道与服务) 对于 dao,我使用 genericDao 类。 我对 All Dao 的课程摘要是:
>
package org.me.dao.jpageneric;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.apache.log4j.Logger;
public abstract class GenericDAO<T, K> {
@PersistenceContext(unitName="database")
protected EntityManager em;
protected Logger logger=Logger.getLogger(getClass());
public abstract Query getByIdQuery(K id);
public abstract Query getAllQuery();
public T save(T saved) {
if (saved == null) {
throw new IllegalArgumentException("L'argument de save() ne doit pas être nul.");
}
return (T) em.merge(saved);
} // save()
public void delete(T deleted) {
if (deleted == null) {
throw new IllegalArgumentException("L'argument de delete() ne doit pas être nul.");
}
em.remove(deleted);
} // delete().
@SuppressWarnings("unchecked")
public T get(K id) {
if (id == null) {
throw new IllegalArgumentException("L'argument de get() ne doit pas être nul.");
}
Query query = getByIdQuery(id);
return (T) query.getSingleResult();
}
@SuppressWarnings("unchecked")
public List<T> getAll() {
logger.debug("Récupération de tous les objets");
Query query = getAllQuery();
return (List<T>) query.getResultList();
}
每个 Dao 都必须扩展这个类并实现他的接口(我必须为其他 30 个类做这个)。我希望这是一个好的做法。
之后,我有了另一个用于服务类的抽象泛型类。
package org.me.service.generic;
import java.util.List;
public abstract class GenericService<T,K> {
public abstract T create(T saved);
public abstract void remove(T deleted);
public abstract T findById(K id) ;
public abstract List<T> findAll();
}
她同样的事情,所有的服务类都必须扩展这个通用的服务类并实现每个类的接口。 又是好习惯吗?
当然,我为每个类(包 dao 和服务)都有一个接口。
另一个问题:我必须创建控制器,我该怎么做?为每个类创建一个控制器(也就是说 30 个控制器?) 以及如何处理页面 html 和 jsp? 谢谢你。 对不起,我的英语不好。:-)
【问题讨论】:
-
服务和控制器应该实现应用程序的用例。它们不应包含任意创建、删除和查找方法。假设您正在实现一个银行应用程序。您真的不想列出所有帐户(可能是数百万)或所有客户,对吗?此外,JPA 有
EntityManager.find()通过 ID 获取实体。使用它而不是查询。 -
感谢您提供这些信息。我改变了你说的!更简单,非常有用。我的申请是大使馆、旅行社和外交部。
标签: spring hibernate model-view-controller jpa controller