Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何像GenericDao/JpaRepository一样在服务中保存简单的CRUD代码?_Java_Spring_Jpa_Repository - Fatal编程技术网

Java 如何像GenericDao/JpaRepository一样在服务中保存简单的CRUD代码?

Java 如何像GenericDao/JpaRepository一样在服务中保存简单的CRUD代码?,java,spring,jpa,repository,Java,Spring,Jpa,Repository,我们的web项目使用spring3、Jpa(hibernate) 为了保存CRUD和其他常用方法,我们制作了SpringJParepository的存储库子类 有时我只是将存储库注入控制器,这对于那些简单(或无)的业务逻辑只读数据访问非常方便。e、 g.列出视图中实体类型的所有对象。。。我知道所有这些都应该在具有事务范围的服务层中完成,但这真的很方便 现在有一条规则:控制器层必须通过服务访问数据层。不允许将存储库注入控制器 例如: 我有一个实体:Country.java 而且我有interfac

我们的web项目使用spring3、Jpa(hibernate)

为了保存CRUD和其他常用方法,我们制作了SpringJParepository的存储库子类

有时我只是将存储库注入控制器,这对于那些简单(或无)的业务逻辑只读数据访问非常方便。e、 g.列出视图中实体类型的所有对象。。。我知道所有这些都应该在具有事务范围的服务层中完成,但这真的很方便

现在有一条规则:控制器层必须通过服务访问数据层。不允许将存储库注入控制器

例如:

我有一个实体:
Country.java

而且我有
interface CountryRepository扩展了JpaRepository

此外,我还有CountryService和CountryServiceImpl,它们已经注入了countryRepository。然后我必须创建findAll,findOne,count,findAll(带排序)。。。。方法,这些实现只不过是
返回countryRepository.findAll()countryRepository.findOne(id)countryRepository.count()…

对于每个实体,我必须一次又一次地做同样的事情


是否可以在服务层中使用通用方式保存这些方法?

仅公开应用程序真正使用的服务。我怀疑您是否需要每个实体的
findAll
count


这些方法的实现非常简单,这是一件好事:实现和测试它们不会有任何困难。如果它们变得更复杂,并且需要几个存储库方法调用和一些业务逻辑,您将很高兴只需修改方法,而不必更改所有设计。

我不需要findAll,但我需要findOne来处理>90%的情况。对于一些领域数据,我们可能只需要两种方法(findone和findAll)。但是,我们必须创建1个接口和1个serviceImpl,并“重复”其中的存储库方法。最好保存一些代码。您不必为每个实体都需要服务。我通常为每个用例或每个逻辑用例集提供服务。例如:一个用于客户管理的服务,另一个用于产品管理的服务,等等。但在产品管理的服务中,我将管理产品、类别、价格等。在客户管理中,我将管理客户、他们的地址、他们的联系人等。这将节省一些类别和依赖关系。服务是用来实现业务逻辑的,而不是与单个实体相关的东西。我同意你的服务观点。但无论如何,这些方便的存储库方法都会在服务中重复。