在 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 梳理 - JPA是什么

spring data jpa 详解

Spring Data JPA系列3:JPA项目中核心场景与进阶用法介绍

JPA---Spring-data-JPA---Hibernate

JPA---Spring-data-JPA---Hibernate