解决批量插入,事务单独回滚问题

解决批量插入,事务单独回滚问题

**使用场景:**当批量插入或修改数据库数据时,循环中出现异常,只会滚出现异常的事务,其他数据正常提交。
操作步骤:
**1、**需要在项目中配置事务:
在这里插入图片描述
**2、**具体实现:
在这里插入图片描述

代码:

@Resource
private DataSourceTransactionManager metaTransactionManager;

public ApiResponse insert(){
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别,开启新事务,这样会比较安全些。

        for (int i = 1; i < 6; i++) {
            TransactionStatus status = metaTransactionManager.getTransaction(def);
            metaMapper.insert(Long.valueOf(i));
            try {
                if (i == 3) {
                    int j = 3 / 0;
                }
                //手动事务提交
                metaTransactionManager.commit(status);
            } catch (Exception e){
                //手动开启事务回滚
                metaTransactionManager.rollback(status);
                //可以添加错误日志
                System.out.println("出错了" + i);
                continue;
            }
        }
        return ApiResponse.success();
    }

亲测有效,如有不同见解欢迎来扰。。。

### 回答1: mapper自带的批量插入方法是MyBatis框架提供的一种快速向数据库中插入多条记录的方式。这个方法可以一次性处理多个对象的插入操作,减少了与数据库的交互次数,提高了插入的效率。 使用mapper自带的批量插入方法,需要传入一个对象的集合作为参数。这个集合中的每个对象表示一个要插入的记录。在执行插入操作时,框架会自动将集合中的每个对象转化为对应的插入语句,从而实现批量插入。 与传统的单条插入相比,mapper自带的批量插入方法具有以下优点: 1. 提高了数据库的插入效率,减少了与数据库的交互次数。 2. 简化了代码,减少了重复的插入操作,提高了开发效率。 3. 对于大量数据的插入,使用批量插入方法可以有效地降低系统的负载和资源消耗。 不过,在使用mapper自带的批量插入方法时,也需要注意以下几点: 1. 插入的对象必须是相同的类型,且对象的属性与数据库表的字段对应。 2. 每个对象的属性值不能为null,否则会报错。 3. 在插入大量数据时,可能会导致数据库连接超时或内存溢出等问题,需要根据具体情况进行性能优化。 总之,mapper自带的批量插入方法是一种方便快捷的插入数据的方式,能够提高数据库插入的效率和开发效率,适用于批量插入大量数据的场景。 ### 回答2: mapper自带的批量插入方法是指在使用MyBatis的Mapper接口操作数据库时,可以使用MyBatis提供的批量插入方法,一次性插入多条数据。 在MyBatis中,我们可以通过使用Mapper接口的`insertList`方法来实现批量插入。该方法接收一个List作为参数,List中的每个元素都是要插入的对象。 使用Mapper自带的批量插入方法有以下几个好处: 1. 效率更高:使用批量插入方法可以减少与数据库的交互次数,提高插入数据的效率。这样可以有效地减少数据库的负载,提高系统的整体性能。 2. 简便快捷:使用批量插入方法可以简化程序开发过程,减少编写插入语句的工作量。只需将要插入的对象封装到一个List中,然后调用Mapper的insertList方法即可。 3. 可维护性高:使用Mapper自带的批量插入方法可以使代码更加易读、易维护。通过统一的接口方法,可以减少代码冗余,提高代码的复用性。 需要注意的是,批量插入方法只适用于使用相同的插入语句插入多条记录的情况。如果在批量插入过程中有某条插入失败,整个批量插入操作将会被回滚。因此,在进行批量插入前,需要确保要插入的数据的有效性,以避免数据插入异常。 ### 回答3: mapper自带的批量插入方法是MyBatis框架中的一种快速插入数据的功能。通过这种方法,可以批量插入多条数据,提高数据插入的效率。 使用mapper自带的批量插入方法,我们首先需要定义一个插入语句,在插入语句中使用批量插入的语法。接下来,在mapper接口中定义一个批量插入的方法,并将插入语句的ID作为该方法的参数。在使用时,通过调用该方法并传入需要插入的数据列表,即可实现批量插入。 对于大量数据的插入操作,使用mapper自带的批量插入方法相比于逐条插入的方式,其性能表现更佳。这是因为批量插入可以减少与数据库的交互次数,从而节省了网络带宽和数据库连接资源的开销。同时,批量插入还可以利用数据库批量插入功能,提高数据的插入速度。 需要注意的是,使用批量插入方法时,我们需要保证插入的数据格式正确,即数据的顺序与插入语句定义的列顺序一致,并且数据的类型与列的类型相匹配。此外,如果插入的数据中存在重复的记录,需要注意数据库中是否已经设置了主键或唯一索引约束,以避免插入重复数据造成的异常。 总而言之,mapper自带的批量插入方法是一种便捷且高效的数据插入方式,适用于需要插入大量数据的场景,能够极大地提升插入数据的效率。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值