在 jdbcTemplate 或 DataSource 上提交
2022-09-02 10:06:22
我想使用jdbcTemplate进行提交和回滚。
我的问题基于这个主题
我如何提交或回滚,我应该在jdbcTemplate上这样做,比如
jdbcTemplate.commit();
jdbcTemplate.rollback();
或者还有其他一些方法可以使用jdbcTemplate实现提交和回滚功能。
我想使用jdbcTemplate进行提交和回滚。
我的问题基于这个主题
我如何提交或回滚,我应该在jdbcTemplate上这样做,比如
jdbcTemplate.commit();
jdbcTemplate.rollback();
或者还有其他一些方法可以使用jdbcTemplate实现提交和回滚功能。
调用 或 at will 以编程方式而不是以声明方式设置事务边界。commit
rollback
因此,您必须掌握平台事务管理器 - 将其注入DAO中并自己执行/操作。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);
}
另一种方法是掌握事务模板
示例代码:
@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);
}
});
}}
用。但是,当然,在此之前,您必须为以下各项创建 bean 定义:@Transactional
DataSourceTransactionManager
// Your DataSource bean definition
@Bean
public DataSource dataSource() {
....
}
// Transaction manager bean definition
@Bean
public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource) {
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
dataSourceTransactionManager.setDataSource(dataSource);
return dataSourceTransactionManager;
}
然后你可以使用.服务示例:@Transactional
@Service
public class MyServiceImpl {
@Autowired
private MyDAO myDAO;
@Transactional
public void insert(Entity entity) {
myDAO.insert(entity);
}
}