旅游网站系统wordpress,如何开科技,做镜像网站利润,什么网站做广告效果好Spring JDBC的事务管理
事务#xff08;Transaction#xff09;#xff1a;是关系型数据库中一种能够保障多个写操作#xff08;增、删、改#xff09;要么全部成功#xff0c;要么全部失败的机制。
在基于Spring JDBC的项目中#xff0c;只需要在业务方法上添加Trans…Spring JDBC的事务管理
事务Transaction是关系型数据库中一种能够保障多个写操作增、删、改要么全部成功要么全部失败的机制。
在基于Spring JDBC的项目中只需要在业务方法上添加Transactional注解即可使得此方法是事务性的。
Override
Transactional // 新添加的注解
public void addNew(CategoryAddNewDTO categoryAddNewDTO) {// 暂不关心方法内部代码
}在编程式事务管理过程中需要先开启事务BEGIN然后执行数据操作当全部完成需要提交事务COMMIT如果失败则回滚事务ROLLBACK。
在基于Spring JDBC的项目中只需要使用声明式事务即可也就是只需要在方法上添加Transactional注解即可。
Spring JDBC实现事务管理大致是
开启事务Begin
try {执行事务方法即数据访问操作提交事务Commit
} catch (RuntimeException e) {回滚事务Rollback
}所以Spring JDBC在事务管理中默认将基于RuntimeException进行回滚可以通过Transactional的rollbackFor或rollbackForClassName属性来修改例如
Transactional(rollbackFor {NullPointerException.class, IndexOutOfBoundsException.class})Transactional(rollbackForClassName {java.lang.NullPointerException, java.lang.IndexOutOfBoundsException})还可以通过noRollbackFor或noRollbackForClassName属性来配置对于哪些异常不回滚。
其实Transactional注解可以添加在
接口上 将作用于实现了此接口的类中的所有业务方法 接口中的业务方法上 将作用于实现了此接口的类中的重写的当前业务方法 实现类上 将作用于当前类中所有业务方法 实现类中的业务方法上 将仅作用于添加了注解的业务方法
提示如果在业务类和业务方法上都添加了Transactional却配置了相同名称但不同值的注解参数将以业务方法上的配置为准。
在应用此注解时由于这是一种声明式事务管理推荐添加在接口上或接口中的业务方法上。
理论上如果将Transactional添加在接口上可能有点浪费毕竟并不是每个业务方法都需要是事务性的。
注意由于Spring JDBC在处理事务管理时使用了基于接口的代理模式所以业务方法的内部调用时同一个业务类对象的A方法调用了B方法被调用方法相当于是“无事务的”另外如果某方法不是接口中声明的业务方法只是实现类自行添加的方法无论将Transactional添加在哪里都是无效的
有任何问题欢迎评论区留言哦