spring编程式事务入门案例
参考网址:
https://blog.csdn.net/kass114/article/details/120414702?ops_request_misc=&request_id=&biz_id=102&utm_term=spring%E7%BC%96%E7%A8%8B%E5%BC%8F%E4%BA%8B%E5%8A%A1&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-4-120414702.nonecase&spm=1018.2226.3001.4187
spring事务分类
spring事务分为 编程式事务
和 声明式事务
- 编程式事务
- 声明式事务
一般我们使用声明式事务 , 通过 @Transational 注解 , spring 就可以帮我们控制事务简单方便
声明式事务大概原理
Spring 管理的 javabean 上标注 @Transational 注解 , 或者在类的对应方法上标注@Transational注解 ,
那么对应类或者对应方法就会被 sprin 事务管理 , 底层 spring 会将该类生成动态代理对象 , 没有出现异
常 , 自动提交 , 如果出现异常, 回滚操作 , 用户可以自定义哪些异常进行回滚
编程式事务demo
@Autowired
private PersonDao personDao;
/**
TransactionTemplate
简化编程事务界定和事务异常处理的模板类。
*/
@Autowired
private TransactionTemplate transactionTemplate;
//测试编程式事务
@GetMapping("/transationByCode")
public String transationByCode(){
int i = transationByCodeMethod();
return "影响的行数 "+ i;
}
private int transationByCodeMethod(){
Integer execute = transactionTemplate.execute(transactionStatus -> {
try {
// ... 事务方法
int row = personDao.insert();
// int i = 1/0; //模拟出现异常
return row;
} catch (Exception e) {
e.printStackTrace();
//回滚
transactionStatus.setRollbackOnly();
return 0;
}
});
return execute;
}