当前位置: 首页 > news >正文

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

省流:

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

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

正文:

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

方法一: 

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

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

方法二:

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

需要这几行代码:

            DefaultTransactionDefinition dt = new DefaultTransactionDefinition();dt.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);TransactionStatus status = platformTransactionManager.getTransaction(dt);platformTransactionManager.commit(status);

用法如下: 

    @Autowiredprivate PlatformTransactionManager platformTransactionManager;@Testpublic 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);
        }
    }

http://www.lryc.cn/news/195866.html

相关文章:

  • VS2010 C语言内嵌汇编语言程序
  • 【TES720D】青翼科技基于复旦微的FMQL20S400全国产化ARM核心模块
  • css 左右滚轮无缝衔接
  • Hadoop分布式文件系统-HDFS
  • 专业图表绘制软件 OmniGraffle Pro mac v7.22.1中文版软件介绍
  • Git 本地文件合并和恢复
  • 记录git仓库pr没有显示贡献者的问题,以及如何提交一个pr(简)
  • 入侵检测代码
  • 数字孪生技术如何提高化工生产安全性?
  • PHP 如何查看php函数源码
  • 前端web自动化测试:selenium怎么实现关键字驱动
  • C++标准模板(STL)- 类型支持 (数值极限,min,lowest,max)
  • 国际SPEC CPU创榜以来整机最高纪录!浪潮信息八路服务器TS860G7刷新权威算力基准评测性能
  • 【linux】重定向+缓冲区
  • 【vim 学习系列文章 10 -- vim 将代码中空格高亮显示方法】
  • 吴恩达深度学习笔记
  • 基于SpringBoot的医疗预约服务管理系统
  • Java本地缓存的使用
  • 华为数通方向HCIP-DataCom H12-831题库(单选题:281-300)
  • 【分享Python代码】图片转化为素描画
  • 汇川Easy521PLC与压力传感器485通讯实例
  • 创意作品管理软件 Bridge 2024 mac中文版 br2024功能特色
  • 【分享】教你加速访问GitHub,进来学!
  • 利用在线培训系统提升员工技能,助力企业发展
  • 深度学习小工具:Linux 环境下的用户命令和脚本顺序执行器
  • c# WPF 应用程序在屏幕上居中显示
  • JVM之class文件结构剖析
  • TDengine 签约中石化,支撑八大油田 PCS 系统
  • win11 定时计划任务
  • C++入门之引用与内联函数