包层级结构 (Package Hierarchy)
Spring 框架的 JDBC 抽象框架由四个不同的包组成:
core:org.springframework.jdbc.core包包含JdbcTemplate类及其各种回调接口,以及一系列相关类。名为org.springframework.jdbc.core.simple的子包包含SimpleJdbcInsert和SimpleJdbcCall类。另一个名为org.springframework.jdbc.core.namedparam的子包包含NamedParameterJdbcTemplate类和相关的支持类。datasource:org.springframework.jdbc.datasource包包含一个便于访问DataSource的工具类,以及各种简单的DataSource实现,你可以使用这些实现来测试和运行未经修改的 JDBC 代码(在 Jakarta EE 容器之外)。名为org.springframework.jdbc.datasource.embedded的子包提供了使用 Java 数据库引擎(如 HSQL、H2 和 Derby)创建嵌入式数据库的支持。object:org.springframework.jdbc.object包包含将 RDBMS 查询、更新和存储过程表示为线程安全、可重用对象的类。这种风格产生了一种更加面向对象的方法,尽管查询返回的对象自然与数据库断开连接。这种较高级别的 JDBC 抽象依赖于org.springframework.jdbc.core包中的较低级别抽象。support:org.springframework.jdbc.support包提供SQLException转换功能和一些工具类。JDBC 处理期间抛出的异常将被转换为org.springframework.dao包中定义的异常。这意味着使用 Spring JDBC 抽象层的代码不需要实现 JDBC 或特定于 RDBMS 的错误处理。所有转换后的异常都是非检查异常(unchecked exceptions),这使你可以选择捕获能够从中恢复的异常,同时让其他异常传播到调用者。
补充教学
1. 这种分包设计的用意何在?
Spring JDBC 的分包体现了高度解耦和职责单一的原则:
core是心脏:定义了操作的标准流转。datasource是入口:解决了“如何连接数据库”和“如何获取连接”这两个最初始的问题。object是外观:将面向过程的 JDBC 变为面向对象的 API。support是盾牌:将丑陋且难以维护的特定数据库异常屏蔽,代之以优雅的统一异常体系。
2. 开发者应该重点关注哪个包?
90% 的场景下,你只需要关注 core 包。它是你日常编码的主战场。 如果你是一个初级开发者,datasource 包的配置通常由 Spring Boot 自动帮你完成(通过配置 application.yaml)。 如果你在做一些非常底层的拦截、日志记录或者自定义异常处理,那么你会频繁地与 support 包打交道。 而 object 包,则更多地被用在那些追求极致 OOP(面向对象编程)风格的企业级架构中。