我想使用 jdbcTemplate 进行提交和回滚。
我的问题基于 this thread
我如何提交或回滚,我应该在 jdbcTemplate 上这样做
jdbcTemplate.commit();
jdbcTemplate.rollback();
或者还有其他一些方法可以使用 jdbcTemplate 实现提交和回滚功能。
最佳答案
调用 commit
或 rollback
以编程方式而不是声明方式设置事务边界。
因此,您必须获取 PlatformTransactionManager - 在你的 DAO 中注入(inject)它并自己执行 commit
/rollback
操作。
示例代码:
@Autowired private JdbcTemplate jdbcTemplate;
@Autowired private PlatformTransactionManager platformTransactionManager;
//..
public void daoMethod(params) {
DefaultTransactionDefinition paramTransactionDefinition = new DefaultTransactionDefinition();
TransactionStatus status=platformTransactionManager.getTransaction(paramTransactionDefinition );
try{
String sqlQuery = "query";
jdbcTemplate.update(sqlQuery, params);
platformTransactionManager.commit(status);
}catch (Exception e) {
platformTransactionManager.rollback(status);
}
另一种方法是获取 TransactionTemplate
示例代码:
@Autowired private JdbcTemplate jdbcTemplate;
@Autowired private TransactionTemplate transactionTemplate;
//..
//for operations where query does not return like delete
public void daoMethod(params) {
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
protected void doInTransactionWithoutResult(TransactionStatus paramTransactionStatus) {
try{
String sqlQuery = "query";
jdbcTemplate.update(query, params);
}catch (Exception e) {
paramTransactionStatus.setRollbackOnly();
}
}
});
}
//for operations where query does return like insert
public int daoMethod(params) {
return transactionTemplate.execute(new TransactionCallback<Integer>() {
public Integer doInTransaction(TransactionStatus paramTransactionStatus) {
String sqlQuery = "query";
Object[] params = params;
int[] types = myTypes;
return jdbcTemplate.update(sqlQuery,params,types);
}
});
}}
关于java - 在 jdbcTemplate 或 DataSource 上提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31983352/