【发布时间】:2012-03-17 04:46:27
【问题描述】:
Spring JDBC 与 JDBC 的主要区别是什么?
【问题讨论】:
标签: java spring jdbc spring-jdbc springsource
Spring JDBC 与 JDBC 的主要区别是什么?
【问题讨论】:
标签: java spring jdbc spring-jdbc springsource
让我向您展示一些使用 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 工具时,我们有一个样板代码,这个 Spring ORM 层避免了 ORM 工具的样板代码。
【讨论】:
在我看来,JDBC 与 JDBCTemplate 共享一些功能,但它们可能完全不同。第一眼看到这个问题,我想到的主要区别是:
如果您要处理大量数据,例如您想向数据库中插入数百万(或数十亿)行记录,则可能需要使用 JDBC。在不到 4 分钟的时间里,我通过 JDBC 和 MySQL 语句连接将一百万行包含不同信息的行插入到数据库中。相比之下,我用 JDBC 模板做同样的事情大概需要十多分钟。
但是,如果您使用的是 JDBC,则与使用 JDBC 模板相比,必须编写更多代码才能正确处理。 Tomasz Nurkiewicz 通过代码说明了这一点,Santosh Gokak 提供了使用 JDBC 的步骤摘要。但是在幕后还有一件事是隐含的,那就是 Spring 的配置,因为 JDBC Template 是 Spring Framework 的一部分。如果您是 Spring 的 XML/Annotation 配置新手,事情可能会有点复杂,而 JDBC 虽然需要更多步骤,但在某种程度上更直观。
【讨论】:
Spring JDBC?我只知道几个 Spring JDBC 模板。
它们允许您从 Spring 容器中访问 JDBC 功能,并且与普通 JDBC 相比,它们提供了一些额外的简化,例如连接管理和异常处理。
基本上 Spring 更难设置,但更容易开发,因此这完全取决于您要处理的问题的范围。
【讨论】: