spring - 带有泛型类的 CRUD(dao、service)

标签 spring hibernate model-view-controller jpa controller

我开始使用 spring、hibernate、maven、jpa、springMVC 来构建一个大型应用程序。 目前我有30节课。 (每个类都有接口(interface),我们有 60 个类) 我有两个包裹。 (道与服务) 对于 dao,我使用 genericDao 类。 我的 All Dao 类(class)摘要是:

>
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 都必须扩展这个类并实现他的接口(interface)(我必须为其他 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();
 
}

同样,所有服务类都必须扩展这个通用服务类并实现每个类的接口(interface)。 又是一个好的做法吗?

当然,我为每个类(包 dao 和服务)都有一个接口(interface)。

另一个问题:我必须创建 Controller ,我该怎么做?为每个类创建一个 Controller (也就是说 30 个 Controller ?) 以及如何处理页面 html 和 jsp ? 谢谢。 抱歉我的英语不好。:-)

最佳答案

Spring-data-jpa 取代了 GenericDAO。

您可以查看spring-data-rest为您提供 CRUD 服务。

或者,我建议查看 spring-roo,它为 CRUD 操作构建 Web UI 支架。

关于spring - 带有泛型类的 CRUD(dao、service),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17912270/

相关文章:

java - 如何从 JAX Web 服务中访问原始请求 xml?

java - Springboot junit测试不满足依赖异常

java - session.clear() 是必要的吗?

c++ - QListView 模型用户界面

sql - Node JS Sequelize 从 SQL 创建模型

java - Spring Boot 和 Zuul 不支持代理的图标

java - Mybatis 在 spring 中使用 xml 配置返回大结果

java - Hibernate乐观锁: Not getting any exception

java - 在 Hibernate 中创建 SQLQuery

asp.net-mvc - 如何在 MVC 的单个 foreach 循环中创建水平表?