JdbcTemplate
不是交易管理器。它僅僅是本地JDBC操作的幫助類:
這是JDBC核心包中的中心類。它簡化了JDBC的使用,並有助於避免常見錯誤。它執行核心JDBC工作流程,使應用程序代碼提供SQL並提取結果。此類執行SQL查詢或更新,啓動對ResultSets的迭代並捕獲JDBC異常,並將它們轉換爲org.springframework.dao包中定義的通用,更具信息性的異常層次結構。
TransactionTemplate
的方式也不是一個事務管理器,它是一個
模板類,它簡化了程序性事務界定和交易異常處理。
的PlatformTransactionManager
(的AbstractPlatformTransactionManager
和其它子類)是一個事務管理器,如在它
- 確定是否存在的現有事務;
- 應用適當的傳播行爲;
- 必要時暫停和恢復交易;
- 檢查提交時的僅回滾標誌;
- 在回滾中應用適當的修改(實際回滾或僅設置回滾);
- 觸發器註冊同步回調(如果事務同步處於活動狀態)。
所以這個類是負責實際事務處理,而不是在TransactionTemplate
,這是你,而不是聲明式事務處理要programmetically實現它使用。 (請參閱this博客,儘管相當過時,但您會看到聲明式和手動式之間的區別)
來自Spring 3 Reference的引文。
注意:在整個Spring框架中,您還可以找到其他* Template類:HibernateTemplate,JmsTemplate等等。它們都遵循相同的模式:模板類從根本上減少了需要編寫的代碼量,因爲所有所謂的樣板代碼將由他們處理。示例(從here):
沒有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) {}
}
}
}
而且隨着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()
});
}
你需要停止讀取春手工的古老的版本。 2.0.x已經有幾年了。 – skaffman
我應該查看哪些最新版本? –
3.0.5是最新的穩定版 – abalogh