26

Spring JDBC 与 JDBC 之间的主要区别是什么?

4

5 回答 5

34

让我向您展示一些使用 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 功能。

于 2012-02-27T18:09:01.313 回答
2

Spring 框架的顶层 JDBC 层提供的 Spring JDBC 增值

  1. 定义连接参数
  2. 打开连接
  3. 指定语句
  4. 准备并执行语句
  5. 设置循环以遍历结果(如果有)
  6. 完成每次迭代的工作
  7. 处理任何异常
  8. 处理交易
  9. 关闭连接

基本上,您无需担心基础设施/管道代码的管理和痛苦,只需担心数据及其与对象的映射。

Spring 利用模板模式隐藏所有低级细节,同时为您提供扩展挂钩来扩展和使用 JDBC。

此外,还有一个定义良好的数据库异常 API,与低级 JDBC API 提供的异常层次结构相比,它对开发人员非常友好

于 2012-02-27T18:02:32.937 回答
2

1.) Spring jdbc模块是在jdbc技术之上的一个抽象层,该层避免了jdbc编程中使用的样板代码。2.) Spring ORM 模块是顶级 ORM 工具的抽象层。3.) 当再次使用像休眠这样的 ORM 工具时,我们有一个样板代码,这个弹簧 ORM 层避免了 ORM 工具的样板代码。

于 2017-11-07T07:04:24.840 回答
1

春天的JDBC?我只知道几个 Spring JDBC 模板。

它们允许您从 Spring 容器中访问 JDBC 功能,并且与普通 JDBC 相比,它们提供了一些额外的简化,例如连接管理和异常处理。

基本上 Spring 更难设置但更容易开发,所以这完全取决于您正在处理的问题的范围。

于 2012-02-27T18:02:05.197 回答
1

在我看来,JDBC 与 JDBCTemplate 共享一些功能,但它们可能完全不同。乍一看这个问题,我想到的主要区别是:

  • 如果您正在处理大量数据,例如您想要向数据库中插入数百万(或数十亿)行记录,您可能想要使用 JDBC。在不到 4 分钟的时间里,我通过 JDBC 和 MySQL 语句连接将一百万行具有不同信息的行插入到数据库中。相比之下,使用 JDBC 模板做同样的事情可能需要十多分钟。

  • 但是,如果您使用 JDBC,则与使用 JDBC 模板相比,必须编写更多代码才能正确处理。Tomasz Nurkiewicz 通过代码说明了这一点,Santosh Gokak 提供了使用 JDBC 的步骤摘要。但在幕后还有一件事是隐含的,那就是 Spring 的配置,因为 JDBC Template 是 Spring Framework 的一部分。如果您不熟悉 Spring 的 XML/Annotation 配置,事情可能会有点复杂,而 JDBC 虽然需要更多步骤,但在某种程度上更直观。

于 2018-11-01T06:38:30.960 回答