Spring JDBC与普通JDBC之间的区别?

时间:2012-02-27 17:47:21

标签: java spring jdbc spring-jdbc springsource

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

6 个答案:

答案 0 :(得分:22)

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

答案 1 :(得分:2)

1。)Spring jdbc模块是jdbc技术之上的抽象层,该层避免了jdbc编程中使用的样板代码。 2.)Spring ORM模块是顶级ORM工具的抽象层。 3.)当再次使用像hibernate这样的ORM工具时,我们今年春天有一个Boiler板代码,ORM层避免了ORM工具的锅炉板代码。

答案 2 :(得分:1)

Spring框架在顶级JDBC层提供的Spring JDBC值添加

  1. 定义连接参数
  2. 打开连接
  3. 指定声明
  4. 准备并执行声明
  5. 设置循环以迭代结果(如果有)
  6. 为每次迭代完成工作
  7. 处理任何例外
  8. 处理交易
  9. 关闭连接
  10. 基本上,您不必担心管理和使用基础架构/管道代码,并且完全担心数据及其到对象的映射。

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

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

答案 3 :(得分:0)

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

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

基本上Spring很难设置,但更容易开发,所以这一切都取决于你正在处理的问题的范围。

答案 4 :(得分:0)

在我看来,JDBC与JDBCTemplate共享一些功能,但是它们可以完全不同。乍一看,我想到的主要差异是:

  • 如果要处理大量数据,例如要在数据库中插入数百万(或数十亿)行记录,则可能要使用JDBC。在不到4分钟的时间内,我通过JDBC和MySQL语句串联将一百万行包含不同信息的行插入到数据库中。相比之下,使用JDBC模板进行同一操作可能要花费我十多分钟。

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

答案 5 :(得分:0)

您可以将自己的库用于此类JDBC任务:

附加maven依赖项:

<dependency>
   <groupId>com.github.buckelieg</groupId>
   <artifactId>db-fn</artifactId>
   <version>0.3.8</version>
</dependency>

然后在代码中使用:

DB db = new DB(ds::getConnection);
int result = db.select("SELECT COUNT(*) FROM Orders").single(rs -> rs.getInt(1)).orElse(0);

查看更多here