Skip to content

数据访问 (Data Access)

参考文档的这一部分涉及数据访问,以及数据访问层与业务层或服务层之间的交互。

Spring 全面的事务管理支持在后续章节中进行了详细介绍,随后是对 Spring 框架集成的各种数据访问框架和技术的透彻讲解。

章节摘要


补充教学

1. Spring 数据访问的核心哲学:异常检查 vs 运行时异常

在没有 Spring 之前,JDBC 开发最痛苦的事情之一就是处理 SQLException。这是一个编译时检查异常(Checked Exception),强制开发者在每一层都进行 try-catch 或向上抛出,而大部分 SQLException(如语法错误、连接失败)其实在业务代码层是无法恢复的。

Spring 的做法

  • 异常转译 (Exception Translation):Spring 会捕捉底层的特定技术异常(如 SQLException 或 Hibernate 异常),并将其转换为 Spring 自己的 DataAccessException 体系。
  • 一致性:无论你底层使用 JDBC、JPA 还是 MongoDB,抛出的都是 Spring 定义的、非检查的(Unchecked)运行时异常。这简化了代码,并解耦了数据访问技术与业务逻辑。

2. 模板模式 (Template Pattern) 的运用

JdbcTemplate 是 Spring 数据访问中最经典的工具。它通过模板方法模式,将繁琐的“获取连接、创建语句、处理结果集、关闭连接”等样板代码封装起来。

  • 开发者只需关注:SQL 语句是什么,以及如何映射结果集。
  • Spring 负责:所有的资源释放和连接生命周期管理。

3. 从阻塞到响应式:JDBC 到 R2DBC

虽然 JDBC 历史悠久且稳定,但它的 API 本质上是阻塞的。在追求高并发、高性能的云原生应用中,R2DBC (Reactive Relational Database Connectivity) 应运而生。

  • JDBC:一个连接一个线程,线程在等待数据库查询结果时是被挂起的(阻塞)。
  • R2DBC:非阻塞、响应式流,能够以更少的资源处理更多的并发任务,是 Spring WebFlux 推荐的数据存储配套技术。

4. 事务管理:Spring 的基石

事务管理是 Spring 数据访问模块中最强大的功能。通过 @Transactional 注解,你可以轻松实现复杂的事务传播行为、隔离级别和回滚策略,而无需编写一行事务启动或提交的代码。这正是“关注点分离”的最佳实践。

Based on Spring Framework.