spring - 在 Spring Data JPA 中以 3 种不同的方式创建查询

标签 spring spring-boot spring-data spring-data-jpa jpql

我有创建应用程序的任务,该应用程序有剩余服务来参与带有数据库的 CRUD Controller 。

所以: 我需要创建休息服务来引入 spring 方法,这些方法执行存储库(JpaRepository - Spring Data)中的方法,这些方法在发明的实体上创建、读取、更新和删除。

“下载”数据的代码应该有几个版本:

  1. 根据方法名称自动创建查询
  2. 创建使用 @Query 注释定义她的查询(在提供给存储库的方法之前)
  3. 使用 JpaRepository 共享的方法创建查询。

基本上问题是我不明白这个问题......

就像您在这里注意到的那样:github我使用第三点(JpaRepository)创建了这个,但我真的不明白如何在不使用 JpaRepository 的情况下自动创建 CRUD 查询。所以我的问题是:

  1. 这个问题意味着我需要创建 3 次 CRUD,或者只是向我的代码中添加另外 2 个服务?
  2. 您能否向我展示此查询在第一点和第二点中的示例?
  3. 在第 2 点中,我需要使用 @query,从此 spring documentation我对这个注释了解很多,但我不知道是否可以在没有扩展 JpaRepository 的接口(interface)的情况下创建这些查询?

最佳答案

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? )

关于spring - 在 Spring Data JPA 中以 3 种不同的方式创建查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42774750/

相关文章:

使用 Spring WebFlow 进行 Javascript 表单验证

java - spring-boot 应用程序启动失败

java - Kotlin + SpringBoot : DI lateinit property service has not been initialized

java - 计划部署Spring boot app,Jetty和tomcat哪个容器更好?

java - MongoRepository findOne 使用 "id"而不是 "_id"

java - 用于检索多列的 Spring Data 方法名称

java - 如何减少创建 c3p0 ComboPooledDataSource 和获取 Oracle 数据库连接的超时时间?

javascript - Vaadin 14 Springboot javascript 不工作

Spring Data Neo4j -repository.save 和 @Indexed(unique=true)

java - 警告 : No mapping found for HTTP request with URI [] in DispatcherServlet with name 'dispatcher'