首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TransactionTemplate对JdbcTemplate

TransactionTemplate对JdbcTemplate
EN

Stack Overflow用户
提问于 2011-07-02 18:36:07
回答 1查看 13.2K关注 0票数 5

Spring框架提供了两种编程事务管理方法:

使用TransactionTemplate.的

  1. 直接使用PlatformTransactionManager实现.

这里描述了上面的内容:http://static.springsource.org/spring/docs/2.0.8/reference/transaction.html

Spring站点在这里没有提到JdbcTemplate。根据我的理解,JdbcTemplate还在内部管理事务,这也是在程序中完成的。

那么,TransactionTemplateJdbcTemplate的基本区别是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-02 19:35:33

JdbcTemplate不是事务管理器。它只是本地JDBC操作的助手类:

--这是JDBC包中的中心类。它简化了JDBC的使用,有助于避免常见的错误。它执行核心JDBC工作流,留下应用程序代码来提供SQL和提取结果。这个类执行SQL查询或更新,在ResultSets上启动迭代并捕获JDBC,并将它们转换为org.springframework.dao包中定义的通用、信息更丰富的异常层次结构。

顺便说一下,TransactionTemplate也不是事务管理器,它是一个

模板类,它简化了编程事务划分和事务异常处理。

PlatformTransactionManager (和AbstractPlatformTransactionManager的其他子类)是一个事务管理器,与它一样

如果存在一个现有的transaction;

  • applies,即适当的传播behavior;

  • suspends,
  • 将恢复事务,如果necessary;
  • checks是commit;
  • applies上的仅回滚标志,则在回滚上进行适当的修改(实际回滚或设置rollback-only);
  • triggers注册的同步回调(如果事务同步是活动的)。

因此,这个类负责实际的事务处理,而不是TransactionTemplate,如果您想要以编程方式实现它,而不是声明性事务处理,则需要使用该类。(请参阅this博客,尽管非常过时,但您将看到声明性和手动性之间的区别)

来自Spring 3 Reference的引号。

注意:在整个Spring中,您还可以找到其他*模板类: HibernateTemplate、JmsTemplate等。它们都遵循相同的模式:模板类,它从根本上减少了您需要编写的代码数量,因为所有所谓的样板代码都将由它们处理。示例(来自here):

JdbcTemplate

代码语言:javascript
复制
private DataSource dataSource;

public void setDataSource(DataSource dataSource) {
    this.dataSource = dataSource;
}

public void insert(Customer customer){

    String sql = "INSERT INTO CUSTOMER " +
            "(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
    Connection conn = null;

    try {
        conn = dataSource.getConnection();
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1, customer.getCustId());
        ps.setString(2, customer.getName());
        ps.setInt(3, customer.getAge());
        ps.executeUpdate();
        ps.close();

    } catch (SQLException e) {
        throw new RuntimeException(e);

    } finally {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {}
        }
    }
}

以及使用JdbcTemplate

代码语言:javascript
复制
private DataSource dataSource;
private JdbcTemplate jdbcTemplate;

public void setDataSource(DataSource dataSource) {
    this.dataSource = dataSource;
}

public void insert(Customer customer){

    String sql = "INSERT INTO CUSTOMER " +
        "(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";

    jdbcTemplate = new JdbcTemplate(dataSource);

    jdbcTemplate.update(sql, new Object[] { customer.getCustId(),
        customer.getName(),customer.getAge()  
    });

}
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6558871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档