> For the complete documentation index, see [llms.txt](https://potoyang.gitbook.io/spring-in-action-v4/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://potoyang.gitbook.io/spring-in-action-v4/untitled-6/untitled.md).

# 12.4　小结

关系型数据库作为数据持久化领域唯一可选方案的时代已经一去不返了。现在，我们有多种不同的数据库，每一种都代表了不同形式的数据，并提供了适应多种领域模型的功能。Spring Data 能够让我们在 Spring 应用中使用这些数据库，并且使用一致的抽象方式访问各种数据库方案。

在本章中，我们基于前一章使用 JPA 时所学到的 Spring Data 知识，将其应用到了 MongoDB 文档数据库和 Neo4j 图数据库中。与 JPA 对应的功能类似，Spring Data MongoDB 和 Spring Data Neo4j 项目都提供了基于接口定义自动生成 Repository 的功能。除此之外，我们还看到了如何使用 Spring Data 所提供的注解将领域模型映射为文档、节点和关联关系。

Spring Data 还支持将数据持久化到 Redis key-value 存储中。Key-value 存储明显要简单一些，因此没有必要支持自动化 Repository 和映射注解。不过，Spring Data Redis 还是提供了两个不同的模板类来使用 Redis key-value 存储。

不管你选择使用哪种数据库，从数据库中获取数据都是消耗成本的操作。实际上，数据库查询是很多应用最大的性能瓶颈。我们已经看过了如何通过各种数据源存储和获取数据，现在看一下如何避免出现这种瓶颈。在下一章中，我们将会看到如何借助声明式缓存避免不必要的数据库查询。
