对 Spring 数据 API 文档的查询
A query on Spring Data API documentation
来自 Spring 数据 JPA 文档页面:
Spring Data JPA provides repository support for Java Persistence API(JPA). It simplifies development of applications which need to access JPA data sources.
我了解什么是 JPA API,并且使用过 Hibernate。我知道 JPA 为 ORM 库提供了关于如何将 Java 对象映射到 RDBMS table.
中的记录的规范
但是我不明白这里的'repository support'是什么意思。 JPA 数据源究竟是什么? JPA 不是 ORM 库可以实现的规范,而数据源可能类似于 RDBMS 数据库吗?
And what exactly is a JPA data source? Isn't JPA a spec which a ORM
library can implement, while a data source may be something like a
RDBMS database?
不是,JPA 数据源是一个 JPA 概念。
你有两种:JTA datasources and no JTA datasources.
第一个通常由 Java EE 服务器(JBoss、Weblogic...)提供。
如果您使用轻量级容器(Tomcat、Jetty 等),例如 Spring Boot 提供的这些,默认情况下您不会依赖 JTA,因此您将使用 no JTA datasource .
JPA 实现(Hibernate、EclipseLink 等)提供了对两种数据源模式的支持。
But I am not able to understand what does 'repository support' here
means.
Spring 数据存储库是一个非常广泛的概念,具有许多功能,但我们可以将其概括为 the doc 状态:
The goal of the Spring Data repository abstraction is to significantly
reduce the amount of boilerplate code required to implement data
access layers for various persistence stores.
Repository 起源于 DDD 方法。您可以找到其目的及其使用方法的摘要 here。
在 Spring 中,Repository 有几种风格。
我一般使用:
- 存储库:最低限度的支持(您可以自由声明要使用的 crud 方法)。
- CrudRepository :一个通用的 DAO,具有开箱即用的所有 crud 方法。
- 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
) 和 deleteByLastname()
和 removeByLastname()
将生成一个带有查询实现的主体,该主体执行它们的命名、它们的参数和它们的 return 类型公开(一些约定是为了尊重).
您可以这样使用 bean,例如:
@Autowired
UserRepository repository;
public void doSomeThings(User userToInsert, String lastnameTodelete){
repository.save(user); // provided crud method
repository.deleteByLastname(lastnameTodelete); // generated method thanks to convention
}
来自 Spring 数据 JPA 文档页面:
Spring Data JPA provides repository support for Java Persistence API(JPA). It simplifies development of applications which need to access JPA data sources.
我了解什么是 JPA API,并且使用过 Hibernate。我知道 JPA 为 ORM 库提供了关于如何将 Java 对象映射到 RDBMS table.
中的记录的规范但是我不明白这里的'repository support'是什么意思。 JPA 数据源究竟是什么? JPA 不是 ORM 库可以实现的规范,而数据源可能类似于 RDBMS 数据库吗?
And what exactly is a JPA data source? Isn't JPA a spec which a ORM library can implement, while a data source may be something like a RDBMS database?
不是,JPA 数据源是一个 JPA 概念。
你有两种:JTA datasources and no JTA datasources.
第一个通常由 Java EE 服务器(JBoss、Weblogic...)提供。
如果您使用轻量级容器(Tomcat、Jetty 等),例如 Spring Boot 提供的这些,默认情况下您不会依赖 JTA,因此您将使用 no JTA datasource .
JPA 实现(Hibernate、EclipseLink 等)提供了对两种数据源模式的支持。
But I am not able to understand what does 'repository support' here means.
Spring 数据存储库是一个非常广泛的概念,具有许多功能,但我们可以将其概括为 the doc 状态:
The goal of the Spring Data repository abstraction is to significantly reduce the amount of boilerplate code required to implement data access layers for various persistence stores.
Repository 起源于 DDD 方法。您可以找到其目的及其使用方法的摘要 here。
在 Spring 中,Repository 有几种风格。
我一般使用:
- 存储库:最低限度的支持(您可以自由声明要使用的 crud 方法)。
- CrudRepository :一个通用的 DAO,具有开箱即用的所有 crud 方法。
- 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
) 和 deleteByLastname()
和 removeByLastname()
将生成一个带有查询实现的主体,该主体执行它们的命名、它们的参数和它们的 return 类型公开(一些约定是为了尊重).
您可以这样使用 bean,例如:
@Autowired
UserRepository repository;
public void doSomeThings(User userToInsert, String lastnameTodelete){
repository.save(user); // provided crud method
repository.deleteByLastname(lastnameTodelete); // generated method thanks to convention
}