Spring JDBC 与 JDBC 之间的主要区别是什么?
5 回答
让我向您展示一些使用 JDBC 的简单示例:
final Connection connection = ds.getConnection();
try {
final Statement statement = connection.createStatement();
try {
final ResultSet resultSet = statement.executeQuery("SELECT COUNT(*) FROM Orders");
try {
resultSet.next();
final int c = resultSet.getInt(1);
} finally {
resultSet.close();
}
} finally {
statement.close();
}
} finally {
connection.close();
}
尝试使用资源时会好得多:
try (
Connection connection = ds.getConnection();
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT COUNT(*) FROM Orders");
) {
resultSet.next();
final int c = resultSet.getInt(1);
}
当然你可以提取通用代码并使用模板方法设计模式。实际上你会重新发明JdbcTemplate
:
final int c = new JdbcTemplate(ds).queryForInt("SELECT COUNT(*) FROM Orders");
此外,Spring JDBC 提供了异常翻译(不再检查SQLException
数据库/方言之间的差异)和简单的 ORM 功能。
Spring 框架的顶层 JDBC 层提供的 Spring JDBC 增值
- 定义连接参数
- 打开连接
- 指定语句
- 准备并执行语句
- 设置循环以遍历结果(如果有)
- 完成每次迭代的工作
- 处理任何异常
- 处理交易
- 关闭连接
基本上,您无需担心基础设施/管道代码的管理和痛苦,只需担心数据及其与对象的映射。
Spring 利用模板模式隐藏所有低级细节,同时为您提供扩展挂钩来扩展和使用 JDBC。
此外,还有一个定义良好的数据库异常 API,与低级 JDBC API 提供的异常层次结构相比,它对开发人员非常友好
1.) Spring jdbc模块是在jdbc技术之上的一个抽象层,该层避免了jdbc编程中使用的样板代码。2.) Spring ORM 模块是顶级 ORM 工具的抽象层。3.) 当再次使用像休眠这样的 ORM 工具时,我们有一个样板代码,这个弹簧 ORM 层避免了 ORM 工具的样板代码。
春天的JDBC?我只知道几个 Spring JDBC 模板。
它们允许您从 Spring 容器中访问 JDBC 功能,并且与普通 JDBC 相比,它们提供了一些额外的简化,例如连接管理和异常处理。
基本上 Spring 更难设置但更容易开发,所以这完全取决于您正在处理的问题的范围。
在我看来,JDBC 与 JDBCTemplate 共享一些功能,但它们可能完全不同。乍一看这个问题,我想到的主要区别是:
如果您正在处理大量数据,例如您想要向数据库中插入数百万(或数十亿)行记录,您可能想要使用 JDBC。在不到 4 分钟的时间里,我通过 JDBC 和 MySQL 语句连接将一百万行具有不同信息的行插入到数据库中。相比之下,使用 JDBC 模板做同样的事情可能需要十多分钟。
但是,如果您使用 JDBC,则与使用 JDBC 模板相比,必须编写更多代码才能正确处理。Tomasz Nurkiewicz 通过代码说明了这一点,Santosh Gokak 提供了使用 JDBC 的步骤摘要。但在幕后还有一件事是隐含的,那就是 Spring 的配置,因为 JDBC Template 是 Spring Framework 的一部分。如果您不熟悉 Spring 的 XML/Annotation 配置,事情可能会有点复杂,而 JDBC 虽然需要更多步骤,但在某种程度上更直观。