springboot+mybatis事务使用

大家好我使用springboot集成mybatis,在一个业务处理中使用for循环插入数据,

比如list中有十条数据,for执行mappe.insert(user)十次,我的理解是方法上使用了

 @Transactional

如果后面insert报错,前面插入的数据也会回滚,但是实际没有,我的理解哪里有问题吗?

1、事务是否生效:1)数据库是否支持,引擎是否支持,2)Spring是否开启事务支持 3、AOP是否拦截事务注解
2、采用批处理insert语句

参考推荐:https://www.roncoo.com/course/list.html?courseName=mybatis

首先看你的数据库存储类型是否支持事物,然后看是否开启事物支持@EnableTransactionManager,然后也可以批量插入操作

如果数据库是支持事务,并且已经开启了事务支持,在for循环所在方法上添加 @Transactional 是可以实现事务控制,你的没实现,就从这两个地方找找原因吧,还有,尽可能减少访问数据库的次数,必要情况下可以使用批处理

当你的事物配置全部没问题的时候需要注意下面两点。
1. 你的for是在加了@Transactional的方法里面循环的执行插入数据的,而不是你在一个for循环里面去调用一个加了@Transactional的事物方法插入数据。
2. 在你的事物方法里面,如果出现异常需要直接往方法外面抛出,不能使用try catch来解决异常,哪怕是使用了也需要在catch里面在继续throw 一个异常。
当其遇到异常就会直接回滚。

https://blog.csdn.net/qq_31122833/article/details/80567651

1、在方法体上加上:
@Transactional(rollbackFor = Exception.class)

2、在方法体内,写try catch捕捉。当抛异常时: 

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//回滚

logger.error(e.getMessage(),e);