Java Spring数据::使存储库方法在服务接口中可用

Java Spring数据::使存储库方法在服务接口中可用,java,spring,hibernate,spring-data-jpa,spring-data,Java,Spring,Hibernate,Spring Data Jpa,Spring Data,我正在使用spring数据和JPA/Hibernate作为我的存储库。当我扩展JpaRepository时,我像往常一样得到了许多方法,因为它实现了PagingAndSortingRepository和Crudepository 我正在使用我的服务类中的存储库。我现在的问题是,是否有一种方法可以在我的服务接口中获取存储库中的所有方法,以便服务实现类可以使用与存储库相同的方法名将调用委托给存储库 我想使用与存储库方法相同的方法名,也不想直接从控制器调用存储库 我是否必须将JpaRepository

我正在使用spring数据和JPA/Hibernate作为我的存储库。当我扩展JpaRepository时,我像往常一样得到了许多方法,因为它实现了PagingAndSortingRepository和Crudepository

我正在使用我的服务类中的存储库。我现在的问题是,是否有一种方法可以在我的服务接口中获取存储库中的所有方法,以便服务实现类可以使用与存储库相同的方法名将调用委托给存储库

我想使用与存储库方法相同的方法名,也不想直接从控制器调用存储库


我是否必须将JpaRepository、PagingAndSortingRepository和Crudepository中的所有方法签名复制到我的服务接口中?

如果我正确理解了这个问题。首先,将repository创建为扩展JpaRepository或其他接口的接口,不要忘记用@repository注释您的接口。然后创建您的服务并将存储库注入其中,这样您就可以在服务中创建自己的方法(可以使用任何名称)。然后,您可以将服务注入控制器。这项技术经常使用。

我想你误解了
服务的真正含义。
服务
是处理业务逻辑的点。它的方法应该表示业务操作,而不仅仅是数据检索/持久化操作

简单地使用所有的
JpaRepository
方法并将其委托给
存储库
,会导致大量代码重复,您应该避免这种情况

根据您的业务需求构建您的
服务。
如果您觉得没有必要使用服务中间件,可能是因为您只获取/设置数据,只需在
控制器内
自动连线
存储库


控制器中使用
存储库
并不总是正确的。视情况而定。

您不需要将
存储库的方法复制到任何服务。SpringDataJPA提供了许多强大的功能来编写自定义查询

假设您有一个名为
User
的域的
UserRepository
,并希望通过其电子邮件地址查找用户。与其在扩展
UserRepository
的单独服务中创建
findByEmail
方法,只需在
UserRepository
界面中声明它:

User findByEmail(字符串电子邮件);
SpringDataJPA将为您完成所有的脏活。您可以通过在
控制器
(或其他类)中注入
用户存储库
来调用此方法

以上只是一个简单的例子。您甚至可以使用多个条件声明查询:

User findByEmailOrUsername(字符串电子邮件,字符串用户名);
用户findByEmailAndActiveTrue(字符串电子邮件);
列出findTop10ByEmail();

我建议您探索JPA的Spring数据。通过编写几行代码,您可以做很多事情。

为什么不在存储库接口中声明您自己的方法呢?这就是SpringDataJPA的建议。我知道我们可以将自己的方法放在存储库中,我只是给出了spring数据的最简单用法