为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉莫斯之舞 2022-06-15 09:56:42
我正在为我的存储库使用 spring Data 和 JPA/Hibernate。当我扩展 JpaRepository 时,我会像往常一样获得许多方法,因为它实现了 PagingAndSortingRepository 和 CrudRepository。我正在使用我的服务类中的存储库。我现在的问题是,有没有一种方法可以在我的服务接口中获取存储库中的所有方法,以便服务实现类可以使用与存储库相同的方法名称将调用委托给存储库。我想使用与存储库方法相同的方法名称,也不想直接从控制器调用我的存储库。我是否必须将 JpaRepository、PagingAndSortingRepository 和 CrudRepository 中的所有方法签名复制到我的服务接口中?
查看完整描述

3 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

我认为您误解了 a 的Service真正含义。
AService是处理业务逻辑的点。它的方法应该代表业务操作,而不仅仅是数据检索/持久化的方法。

简单地拥有所有JpaRepository方法并委托给 aRepository是大量代码重复的秘诀,您应该避免这种情况。

Service根据您的业务需求构建您的。
如果您觉得不需要 Service 中间件,可能是因为您只获取/设置数据,只需Autowire在.RepositoryController

使用Repository内部 aController是错误的并不总是正确的。这取决于。


查看完整回答
反对 回复 2022-06-15
?
慕仙森

TA贡献1827条经验 获得超7个赞

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



查看完整回答
反对 回复 2022-06-15
?
隔江千里

TA贡献1906条经验 获得超10个赞

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


假设您有UserRepository一个名为的域User并希望通过他/她的电子邮件地址找到用户。findByEmail不要在扩展的单独服务中创建方法,只需在接口UserRepository内声明它:UserRepository


User findByEmail(String email);

然后,Spring Data JPA 将为您完成所有繁琐的工作。UserRepository您可以通过在Controller(或其他类)中注入来调用此方法。


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


User findByEmailOrUsername(String email, String username);


User findByEmailAndActiveTrue(String email);


List<User> findTop10ByEmail();

我建议您探索 Spring Data JPA 的官方文档。通过编写几行代码,您可以做很多事情。


查看完整回答
反对 回复 2022-06-15
  • 3 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信