Akh*_*hil 13 java spring spring-jdbc
我想使用jdbcTemplate进行提交和回滚.
我的问题是基于这个主题
如何在jdbcTemplate上进行提交或回滚
jdbcTemplate.commit();
jdbcTemplate.rollback();
Run Code Online (Sandbox Code Playgroud)
或者还有一些其他方法可以使用jdbcTemplate实现提交和回滚功能.
要以编程方式调用commit或rollback随意调用事务边界,而不是以声明方式调用.
因此,您必须掌握PlatformTransactionManager - 将其注入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);
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是获取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);
}
});
}}
Run Code Online (Sandbox Code Playgroud)
使用@Transactional.但是,当然,在此之前,您必须为以下内容创建bean定义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;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用@Transactional.服务示例:
@Service
public class MyServiceImpl {
@Autowired
private MyDAO myDAO;
@Transactional
public void insert(Entity entity) {
myDAO.insert(entity);
}
}
Run Code Online (Sandbox Code Playgroud)
在spring中管理事务最简单的方法是@Transactional注解,所以你的代码看起来会非常简单:
@Transactional(rollbackFor = Exception.class)
public void doSomething(...) {
...
}
Run Code Online (Sandbox Code Playgroud)
阅读更多:http ://docs.spring.io/spring/docs/current/spring-framework-reference/html/transaction.html
| 归档时间: |
|
| 查看次数: |
36767 次 |
| 最近记录: |