关于Spring Data API文档的查询

时间:2019-07-14 08:07:31

标签: hibernate jpa spring-data-jpa datasource

从Spring Data JPA文档页面:

  

Spring Data JPA为Java Persistence API(JPA)提供存储库支持。它简化了需要访问JPA数据源的应用程序的开发。

我了解什么是JPA API,并且已经与Hibernate合作。我了解JPA为ORM库提供了有关如何将Java对象映射到RDBMS表中的记录的规范。

但是我无法理解这里的“存储库支持”是什么意思。 JPA数据源到底是什么? JPA并不是ORM库可以实现的规范,而数据源可能是RDBMS数据库之类的东西?

1 个答案:

答案 0 :(得分:1)

  

JPA数据源到底是什么? JPA不是ORM的规范吗   库可以实现,而数据源可能类似于   RDBMS数据库?

并非如此,JPA数据源是一个JPA概念。
您有两种:JTA datasources and no JTA datasources
第一个通常由Java EE服务器(JBoss,Weblogic ...)提供。
如果使用Spring Boot提供的轻量级容器(Tomcat,Jetty等),则默认情况下,您将不会依赖JTA,因此将使用no JTA datasource

JPA实现(Hibernate,EclipseLink等)提供了对两种数据源模式的支持。

  

但是我无法理解这里的“存储库支持”   手段。

Spring Data存储库是一个非常广泛的概念,具有许多功能,但是我们可以将其概括为the doc状态:

  

Spring数据存储库抽象的目标是显着地   减少实现数据所需的样板代码数量   各种持久性存储的访问层。

存储库源自DDD方法。您可以找到其用途及其使用方法的摘要here
在春季,存储库具有多种口味。 我通常使用:

  • 存储库:最小的支持(您可以免费声明要使用的crud方法)。
  • CrudRepository:一个通用的DAO,提供了所有现成的现成方法。
  • JpaRepository,包括CrudRepository功能,并添加了来自DDD方法和分页支持的规范。

最后,存储库还受益于从存储库接口中的声明方法自动创建的方法。

这是文档中的一个简单示例:

import org.springframework.data.repository.*;

interface UserRepository extends CrudRepository<User, Long> {    
  long deleteByLastname(String lastname);    
  List<User> removeByLastname(String lastname);
}

仅使用此简单代码和正确的Spring配置,在启动Spring容器时,将实例化一个userRepository bean,并实现所有实现的crud方法(在CrudRepository中声明的方法)和{{1} }和deleteByLastname()在查询实现中将具有生成的主体,该主体将执行其命名,其参数和其返回类型暴露的内容(一定要遵守某些约定)。

您可以这样使用Bean,例如:

removeByLastname()