关于事务:使用事务可以保证同一个业务中的多条SQL语句产生的数据修改(增删改)要么全部成功,要么全部失败!
所以,可以认为:**如果某个业务中涉及超过1次的增、删、改操作(例如需要执行2次Update,或1次Update加上1次Delete),则应该使用事务!**
在使用了SpringJDBC后(无视使用哪种数据库,或使用哪种持久层框架),当需要使用事务来保障数据操作时,只需要在相关的业务方法之前添加`@Transactional`注解即可!
> 该注解也可以添加在业务类之前,表示该业务类中所有业务方法都是有事务的保障的!
在SpringJDBC中,事务的处理过程大致是:
开启事务:begin
try {
执行若干条SQL
提交:commit
} catch (RuntimeException e) {
回滚:rollback
}
也就是说,框架在处理时,一旦执行的SQL语句抛出了`RuntimeException`,就会导致事务回滚。
所以,在开发时,应该保证:**所有的增、删、改操作都应该获取其受影响的行数,如果不是预期值,就必须抛出RuntimeException或其子孙类异常,则后续该操作被应用于事务中时,才可以实现回滚效果!**
所以,关于SpringJDBC中事务的应用小结:
1. 所有的增、删、改操作都应该获取其受影响的行数,如果不是预期值,就必须抛出RuntimeException或其子孙类异常,则后续该操作被应用于事务中时,才可以实现回滚效果!
2. 如果某个业务中涉及超过1次的增、删、改操作(例如需要执行2次Update,或1次Update加上1次Delete),则应该在业务方法之前添加`@Transactional`!
> 如果使用的不是SpringBoot,而是传统的SSM框架,则需要在Spring的配置文件中配置`<tx:annotation-driven transaction-manager="xxx" />`和`<bean id="xxx" class="DataSourceTransactionManager"><property name="dataSource" ref="xxxxx" /></bean>`。