for循环中循环一次提交一次 insert update 关闭事务 spring springboot mybatis

省流:

在方法上直接加如下注解:

java 复制代码
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void t1(){
    //业务代码
}

正文:

在测试的时候,有时候会希望在for循环中,代码循环一次就提交一次事务。

方法一:

最简单的方式,就是关闭事务,不需要事务。添加注解如下:

java 复制代码
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void t1(){
    //业务代码
}

方法二:

如果说是真的在生产上有这样的需要,每循环一次就提交事务,那就需要手动控制事务了。

需要这几行代码:

java 复制代码
            DefaultTransactionDefinition dt = new DefaultTransactionDefinition();
            dt.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
            TransactionStatus status = platformTransactionManager.getTransaction(dt);
            platformTransactionManager.commit(status);

用法如下:

java 复制代码
    @Autowired
    private PlatformTransactionManager platformTransactionManager;
    
    @Test
    public void t1(){
        for(int i=0; i<list.size(); i++){
            DefaultTransactionDefinition dt = new DefaultTransactionDefinition();
            dt.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
            TransactionStatus status = platformTransactionManager.getTransaction(dt);
            mapper.select(o);
            mapper.insert(o);
            platformTransactionManager.commit(status);
        }
    }

具体解读请前往以下两篇文章:

Transactional的7种Propagation:

spring springboot mybatis 事务配置 Transactional的Propagation 开启事务 关闭事务_globalcoding的博客

开启和关闭事务时sqlsession创建机制,手动控制事务时sqlsession 创建机制:

spring springboot mybatis transaction 开启事务 关闭事务 不使用事务_globalcoding的博客

=====================分割线=========================

文章到此已经结束,以下是紫薯补丁

@Transactional(propagation = Propagation.NOT_SUPPORTED)

public void t1(){

//业务代码

}

@Autowired

private PlatformTransactionManager platformTransactionManager;

@Test

public void t1(){

for(int i=0; i<list.size(); i++){

DefaultTransactionDefinition dt = new DefaultTransactionDefinition();

dt.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);

TransactionStatus status = platformTransactionManager.getTransaction(dt);

mapper.select(o);

mapper.insert(o);

platformTransactionManager.commit(status);

}

}

相关推荐
Bingo_BIG3 天前
Java Spring框架:单表的查询、新增、修改、删除、导入、导出
java·spring·前后端
程序猿_极客3 天前
【免费】分享一套优质的基于SpringBoot的扶贫助农管理系统(详解)
java·springboot·课程设计·计算机项目
paopaokaka_luck3 天前
智慧社区综合服务小程序(人脸识别、AI问答、Echarts图形化分析)
前端·javascript·spring boot·spring·数据分析·echarts
牧瀬クリスだ3 天前
YAML配置详解:SpringBoot实战指南
java·spring·yml
需要8263 天前
JVM 内存区域与对象创建:一次 GC 从哪来
java·jvm·spring boot·spring·servlet·tomcat
paopaokaka_luck3 天前
考研政治刷题小程序(AI推荐题目、ECharts数据分析、章节练习与专项训练、模拟考试、错题本与收藏夹、学习打卡与目标管理、题库和组卷维护)
前端·javascript·spring boot·spring·数据分析·echarts
步行cgn3 天前
Spring 基于 XML 的自动装配:byType 详解
java·后端·spring
边境悍匪3 天前
蜗牛学苑 Java 智能体学习 Day46|贯穿项目 2 思维导图复盘
java·开发语言·vue.js·学习·spring
步行cgn3 天前
Spring c 命名空间注入详解
java·后端·spring
需要8263 天前
MySQL 索引 B+ 树与“查询为什么变慢了
java·spring boot·spring·spring cloud·tomcat