Spring Boot 存储库中的 API 与 DAO

Posted

技术标签:

【中文标题】Spring Boot 存储库中的 API 与 DAO【英文标题】:API in Spring Boot Repository vs DAO 【发布时间】:2017-09-25 13:35:49 【问题描述】:

我正在尝试在 Spring Boot 中设计一个 Rest API,以及一些设计决策的问题。我对 DAO 与存储库模式/设计之间的整体差异感到完全困惑。经过数小时的阅读,我仍然不明白两者之间的区别,或者哪一个是设计建立后端连接的 API 的首选标准。

这是一个简单的 UML 图,用于突出 api 的高级视图:

这就是我对 API 良好架构的理解。但后来我遇到了this article,它使用存储库模式而不是带有规范设计的 dao。我不明白为什么一个dao接口不能只有一个query函数?这是否打破了 DAO 是什么的概念?

我的问题是:当今在 Spring Boot 和 Java 8 中开发 API 时使用的最佳标准是什么

【问题讨论】:

您在这里有几个问题可能有简明的答案,但您的整体问题对于 SO 来说可能有点宽泛,并吸引了固执己见的答案。因此,它可能不属于这里。 这可能是***.com/q/8550124/1490322的副本 What is the difference between DAO and Repository patterns?的可能重复 Dao == 存储库 AFAIK 就 Spring 存储库而言 【参考方案1】:

如果我正确理解了您的问题,那么使用 Spring Service/Repository 的全部意义在于将业务逻辑从 Controller 分离到 Service 类,而 Repository 唯一要做的就是 DB 操作,您将注入它在您的服务中。 DAO(假设你的 DAO 是一堆使用 JPA 的代码)和 Repository 没有区别,但是使用 Spring Repository 你可以使用查询方法,这太棒了!

任何建议,请随意!

【讨论】:

但是为什么不能只在 DAO 中使用查询方法呢?我想我只是没有看到一个很好的例子就没有完全理解它。有什么我可以看到的同时使用存储库和 dao 层的东西。因为this post强调两者确实有很大区别 因为要使用查询方法,您需要扩展 Spring 类,这里是 Spring Data JPA 的文档:docs.spring.io/spring-data/jpa/docs/1.11.3.RELEASE/reference/…

以上是关于Spring Boot 存储库中的 API 与 DAO的主要内容,如果未能解决你的问题,请参考以下文章

Spring REST Api——访问存储库中的用户详细信息

带有 Docker 的 Spring Boot 2.3。当我在同一个存储库中有多个 Spring Boot 应用程序时,我想为特定应用程序构建映像

如何为 Spring Boot 启动器拆分库中的代码

Spring Boot - 不同数据库的相同存储库和相同实体

使用 Spring Boot 的 RESTful API 中的循环依赖

在spring boot中仅获取值而不是JSON响应中的键和值