如何在服务类中隐藏spring数据存储库功能?

Posted

技术标签:

【中文标题】如何在服务类中隐藏spring数据存储库功能?【英文标题】:How to hide spring data repository functions in service class? 【发布时间】:2016-09-11 21:18:43 【问题描述】:

我正在使用 Spring Data JPA 存储库,我的要求是当我在服务类中调用存储库类方法时,它应该只显示自定义方法,如 addUser(X,Y) 而不是 save()。

我了解的很少,spring 存储库的实现是由 spring 框架在运行时提供的,所以我们不能提供自己的实现。 (这会产生开销)。 JPARepository 中的所有方法都是公开的,所以当我们实现这个接口时,所有方法都将是可见的。 我正在考虑同时使用 DAO 和存储库。 DAO 将提供自定义函数签名,存储库将实现 DAO 接口。

任何黑客?

【问题讨论】:

【参考方案1】:

如果您不想要来自 JpaRepositoryCrudRepository 的方法,请不要扩展它们,而只需使用 Repository。拥有像

这样的存储库接口是非常好的
MyVeryLimitedRepository extends Repository<User, Long> 
     User findByName(String name);

当然,像addUser(X,Y) 这样的方法需要自定义实现。

【讨论】:

【参考方案2】:

在这种情况下,你可以很好地使用 DAO 模式。

通过在服务类中实现 DAO 模式

    您在 Service 和 Repository 之间创建一个包装器。

    您可以自定义编码您的 DAO 层以仅向服务层公开自定义方法

【讨论】:

以上是关于如何在服务类中隐藏spring数据存储库功能?的主要内容,如果未能解决你的问题,请参考以下文章

Spring数据休息 - 是否存在阻止所有删除操作的全局开关?

如何使用spring JPA存储库保存@lob数据

我将如何在 Spring 数据存储库中编写 SELECT TOP 25 sql 查询

DAL 中的实体框架存储库模式,如何实现更新功能?

存储库注释不适用于 Spring 数据 JPA

java - 如何在spring boot java中编写一个函数来处理JPA存储库中的自定义查询?