在 Spring Data JPA 中以 3 种不同方式创建查询
Posted
技术标签:
【中文标题】在 Spring Data JPA 中以 3 种不同方式创建查询【英文标题】:Creating queries in 3 different ways in spring data JPA 【发布时间】:2017-08-04 03:00:33 【问题描述】:我的任务是创建应用程序,该应用程序有休息服务来处理带有数据库的 CRUD 控制器。
所以: 我需要创建休息服务以引入从存储库(JpaRepository - Spring Data)执行方法的 spring 方法,这些方法在发明实体上创建、读取、更新和删除。
“下载”数据的代码应该有几个版本:
-
根据方法名称自动创建查询
使用@Query 注释创建定义她的查询(在将方法提供给存储库之前)
使用 JpaRepository 共享的方法创建查询。
基本上问题是我不明白这个问题......
就像您在这里注意到的那样:github 我使用第三点(JpaRepository)创建了这个,但我真的不明白如何在不使用 JpaRepository 的情况下自动创建 CRUD 查询。所以我的问题是:
-
这个问题的意思是我需要创建 3 次 CRUD 还是只在我的代码中添加 2 个其他服务?
你能告诉我这个查询在第 1 点和第 2 点的样子吗?
在第 2 点中我需要使用@query,从这个spring documentation 我对这个注释了解很多,但我不知道是否可以在没有扩展 JpaRepository 的接口的情况下创建这些查询?
【问题讨论】:
【参考方案1】:JpaRepository 让您有 3 种选择来操作数据:
默认方法(findOne、findAll、...) 实现自定义方法(findUserByFirstname、findByAgeOrderByFirstname、...) 使用@query 注解和 JPQL(如 SQL)实现自定义方法所以:
版本 1:您在 JPA 中实现自定义方法 版本 2:使用 @query 注释创建自定义方法 版本 3:您只使用 JPA 默认方法在 V1 和 V2 中,您的逻辑将主要在 JPA 实现中。在 V3 中,您的所有逻辑都将在服务上。
(如果您想了解 JpaRepository 的工作原理: How are Spring Data repositories actually implemented?)
【讨论】:
"在 V1 和 V2 中,您的逻辑将主要在 JPA 实现中。在 V3 中,您的所有逻辑都将在服务上。"你能说我的 github 中哪个类是“JPA 实现”吗?你的意思是在 v1 和 v2 中我需要删除我的 TopicService 并在其他地方执行此逻辑? 如果你能用自定义方法向我展示一个 github 链接或教程,我将非常感激 spring 数据文档非常完整:docs.spring.io/spring-data/jpa/docs/current/reference/html/…以上是关于在 Spring Data JPA 中以 3 种不同方式创建查询的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring 3.1.0 中使用 Spring Data JPA
Spring Data JPA系列3:JPA项目中核心场景与进阶用法介绍