2

我从 spring、hibernate、maven、jpa、springMVC 开始我的大型应用程序。目前我有 30 节课。(每个类都有接口,我们有 60 个类)我有两个包。(道和服务)对于道,我使用 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 ?谢谢你。对不起,我的英语不好。:-)

4

2 回答 2

2

Spring-data-jpa 替换了您的 GenericDAO。

您可以查看spring-data-rest以获取您的 crud 服务。

或者,我建议查看 spring-roo,它为 web UI 搭建了用于 crud 操作的脚手架。

于 2013-07-29T00:10:31.917 回答
0

软件编程中一些广为人知的良好实践是:

  • 干燥(不要重复自己)。如果您发现自己多次复制相同的代码,那只是一个等待发生的错误——尤其是当需要重构(更改)重复的代码时。
  • 不要重新发明轮子。看看 Spring Data JPA 项目,已经有一个通用的 DAO 功能可以使用

对于 Spring MVC 控制器,我不明白为什么需要对所有控制器进行超类化。您只需要使用@Controller. 将控制器执行的业务功能封装在 Service 类中是一个好主意,这样您就可以在其他地方重用它

于 2013-07-28T23:49:25.657 回答