Spring Framework提供了两种程序化事务管理方法:
1)使用TransactionTemplate.
2)直接使用PlatformTransactionManager实现.
以上内容见http://static.springsource.org/spring/docs/2.0.8/reference/transaction.html
Spring网站在这里没有提到JDBC模板.根据我的理解,jdbc模板也在内部管理事务,这也是在程序中完成的.那么TransactionTemplate和jdbc tempalte之间的基本差异是什么呢?
aba*_*ogh 18
JdbcTemplate不是交易经理.它只是本机JDBC操作的辅助类:
这是JDBC核心包中的中心类.它简化了JDBC的使用,有助于避免常见错误.它执行核心JDBC工作流,使应用程序代码提供SQL并提取结果.此类执行SQL查询或更新,启动对ResultSet的迭代并捕获JDBC异常并将它们转换为org.springframework.dao包中定义的通用的,更具信息性的异常层次结构.
TransactionTemplate 顺便说一句,也不是交易经理,它是一个
模板类,简化了程序化事务划分和事务异常处理.
将PlatformTransactionManager(和其他子类AbstractPlatformTransactionManager)是一个事务管理器,在它
因此,这个类负责实际的事务处理,而不是TransactionTemplate如果您想要以编程方式实现它而不是声明式事务处理,则使用该类.(看到这个博客,虽然已经过时了,你会看到声明和手册之间的区别)
注意:在整个Spring框架中,您还可以找到其他*Template类:HibernateTemplate,JmsTemplate等.它们都遵循相同的模式:模板类从根本上减少了您需要编写的代码量,因为所有所谓的样板代码将由他们处理.示例(从这里):
没有JdbcTemplate:
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) {}
}
}
}
Run Code Online (Sandbox Code Playgroud)
并与JdbcTemplate:
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()
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11394 次 |
| 最近记录: |