= Spring Data JPA image:https://jenkins.spring.io/buildStatus/icon?job=spring-data-jpa%2Fmain&subject=Build[link=https://jenkins.spring.io/view/SpringData/job/spring-data-jpa/] https://gitter.im/spring-projects/spring-data[image:https://badges.gitter.im/spring-projects/spring-data.svg[Gitter]] image:https://img.shields.io/badge/Revved%20up%20by-Develocity-06A0CE?logo=Gradle&labelColor=02303A["由Develocity提升", link="https://ge.spring.io/scans?search.rootProjectNames=Spring Data JPA Parent"]
Spring Data JPA 是大型 https://projects.spring.io/spring-data[Spring Data] 家族的一部分,它使实现基于JPA的存储库变得简单。 这个模块处理对基于JPA的数据访问层的增强支持。 它使构建使用数据访问技术的Spring驱动应用程序变得更加容易。
长期以来,实现应用程序的数据访问层一直是一项繁琐的工作。 执行简单查询以及执行分页和审计需要编写太多样板代码。 Spring Data JPA旨在通过将工作量减少到实际需要的程度来显著改善数据访问层的实现。 作为开发人员,你只需编写存储库接口,包括自定义查找方法,Spring将自动提供实现。
== 特性
- 为JPA实体实现CRUD方法
- 从查询方法名动态生成查询
- 通过查询方法透明触发JPA命名查询
- 实现提供基本属性的域基类
- 支持透明审计(创建、最后更改)
- 可集成自定义存储库代码
- 通过自定义命名空间轻松实现Spring集成
== 行为准则
== 入门
以下是使用Java中Spring Data存储库的应用程序的快速示例:
[source,java]
public interface PersonRepository extends CrudRepository<Person, Long> {
List
List
@Service public class MyService {
private final PersonRepository repository;
public MyService(PersonRepository repository) { this.repository = repository; }
public void doWork() {
repository.deleteAll();
Person person = new Person();
person.setFirstname("Oliver");
person.setLastname("Gierke");
repository.save(person);
List<Person> lastNameResults = repository.findByLastname("Gierke");
List<Person> firstNameResults = repository.findByFirstnameLike("Oli%");
} }
@Configuration @EnableJpaRepositories("com.acme.repositories") class AppConfig {
@Bean public DataSource dataSource() { return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).build(); }
@Bean public JpaTransactionManager transactionManager(EntityManagerFactory emf) { return new JpaTransactionManager(emf); }
@Bean public JpaVendorAdapter jpaVendorAdapter() { HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter(); jpaVendorAdapter.setDatabase(Database.H2); jpaVendorAdapter.setGenerateDdl(true); return jpaVendorAdapter; }
@Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { LocalContainerEntityManagerFactoryBean lemfb = new LocalContainerEntityManagerFactoryBean(); lemfb.setDataSource(dataSource()); lemfb.setJpaVendorAdapter(jpaVendorAdapter()); lemfb.setPackagesToScan("com.acme"); return lemfb; } }
=== Maven配置
添加Maven依赖:
[source,xml]
如果你更喜欢即将发布的主要版本的最新快照,请使用我们的Maven快照仓库并声明适当的依赖版本。
[source,xml]
== 获取帮助
使用Spring Data遇到问题?我们很乐意帮助!
- 查看 https://docs.spring.io/spring-data/jpa/reference/[参考文档]和 https://docs.spring.io/spring-data/jpa/docs/current/api/[Javadocs]。
- 学习Spring基础知识 – Spring Data建立在Spring Framework之上,请查看 https://spring.io[spring.io] 网站获取大量参考文档。 如果你刚开始使用Spring,可以尝试其中一个 https://spring.io/guides[指南]。
- 如果你正在升级,请查看 https://github.com/spring-projects/spring-data-jpa/releases[Spring Data JPA发布说明] 并滚动到你考虑的版本。查看那里的详细信息。(也可以查看 https://github.com/spring-projects/spring-data-jpa/releases/latest[最新稳定版本])
- 提问 - 我们监控 https://stackoverflow.com[stackoverflow.com] 上标记为 https://stackoverflow.com/tags/spring-data[`spring-data-jpa`] 的问题。 你也可以在 https://gitter.im/spring-projects/spring-data[Gitter] 上与社区交流。
- 在 https://github.com/spring-projects/spring-data-jpa/issues[GitHub问题跟踪器] 中报告Spring Data JPA的错误。
== 报告问题
Spring Data使用GitHub作为问题跟踪系统来记录错误和功能请求。如果你想提出问题,请遵循以下建议:
- 在记录错误之前,请搜索 https://github.com/spring-projects/spring-data-jpa/issues[问题跟踪器] 看看是否有人已经报告了该问题。
- 如果问题尚不存在,请 https://github.com/spring-projects/spring-data-jpa/issues[创建新问题]。
- 请在问题报告中提供尽可能多的信息,我们希望知道你使用的Spring Data版本和JVM版本、完整的堆栈跟踪以及任何相关的配置信息。
- 如果需要粘贴代码或包含堆栈跟踪,请使用三个反引号将其格式化为代码。
- 如果可能,尝试创建一个复现问题的测试用例或项目。附上你的代码链接或包含代码的压缩文件。如果可能,使用内存数据库或使用 https://github.com/testcontainers[Testcontainers] 设置数据库。
== 从源代码构建
你不需要从源代码构建来使用Spring Data(二进制文件在 https://repo.spring.io[repo.spring.io]),但如果你想尝试最新最好的版本,Spring Data可以使用 https://github.com/takari/maven-wrapper[maven wrapper] 轻松构建。 你还需要JDK 17或更高版本。
[source,bash]
$ ./mvnw clean install
如果你想使用常规的mvn
命令进行构建,你需要 https://maven.apache.org/run-maven/index.html[Maven v3.8.0或更高版本]。
另请参阅 link:CONTRIBUTING.adoc[CONTRIBUTING.adoc],如果你希望提交拉取请求,特别是在进行第一个非微不足道的更改之前,请签署 https://cla.pivotal.io/sign/spring[贡献者协议]。
=== 构建参考文档
构建文档也会构建项目,但不运行测试。
[source,bash]
$ ./mvnw clean install -Pantora
生成的文档可在target/antora/site/index.html
中获取。
== 指南
https://spring.io/[spring.io] 网站包含几个指南,展示了如何一步步使用Spring Data:
- https://spring.io/guides/gs/accessing-data-jpa/[使用JPA访问数据]:了解如何使用Spring Data JPA处理JPA数据持久化。
- https://spring.io/guides/gs/accessing-data-rest/[通过REST访问JPA数据] 是一个创建REST Web服务的指南,该服务通过存储库公开存储在JPA中的数据。
== 示例
- https://github.com/spring-projects/spring-data-examples/[Spring Data示例] 包含解释特定功能的示例项目。
== 许可证
Spring Data JPA是根据 https://www.apache.org/licenses/LICENSE-2.0.html[Apache 2.0许可证] 发布的开源软件。