我开始使用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都必须扩展这个classe并实现他的界面(我必须为其他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();
}
她同样的事情,所有服务classe必须扩展这个通用服务类并实现每个classe的接口。 这是好的做法吗?
对于每个类都有一个接口(包dao和service)。
另一个问题:我必须创建控制器,我该怎么办?为每个类创建一个控制器(也就是30个控制器?) 以及如何处理页面html和jsp? 谢谢。 对不起,我的英语很糟糕。: - )
答案 0 :(得分:2)
答案 1 :(得分:0)
一些备受好评的软件编程良好实践是:
从Spring MVC控制器开始,我不明白为什么你需要超级控制所有控制器。您只需要使用@Controller
注释每个控制器类。将控制器执行的业务功能封装在Service类中是一个好主意,这样您就可以在其他地方重用它