java_66666 2018-09-10 07:51 采纳率: 0%
浏览 3046
已结题

springboot+mybatis事务使用

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

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

 @Transactional

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

  • 写回答

5条回答 默认 最新

  • qq_38535182 2018-09-10 07:57
    关注

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

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

    评论
  • whs_321 2018-09-10 08:19
    关注

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

    评论
  • Sanjay_yww 2018-09-11 03:42
    关注

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

    评论
  • 路漫漫兮其修远兮 2018-09-11 07:20
    关注

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

    评论
  • 小达哥的垃圾桶 2018-12-13 09:12
    关注

    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);

    评论

报告相同问题?

悬赏问题

  • ¥15 关于c语言的学习问题
  • ¥15 activity升级到flowable工作流act_ge_bytearray的草稿json数据复制到act_de_model 的model_editor_json的脚本
  • ¥15 cvi使用CreateThread创建线程时,出现存储空间不足无法处理此命令的错误
  • ¥15 求苹果推信imessage批量推信技术
  • ¥15 ubuntu 22.04 系统盘空间不足。隐藏的docker空间占用?(相关搜索:移动硬盘|管理系统)
  • ¥15 c++ word自动化,为什么可用接口是空的?
  • ¥15 Matlab计算100000*100000的矩阵运算问题:
  • ¥50 VB6.0如何识别粘连的不规则的数字图片验证码
  • ¥16 需要完整的这份订单所有的代码,可以加钱
  • ¥30 写一个带界面控制的机房电脑一键开机关机并且实时监控的软件