`

(转)关于Mybatis的Batch模式性能测试及结论

 
阅读更多
http://www.blogjava.net/diggbag/articles/mybatis.html

近日在公司项目中,使用到spring+mybatis的架构,特对mybatis的batch模式做了相关研究,得出以下结论:

     1.Mybatis内置的ExecutorType有3种,默认的是simple,该模式下它为每个语句的执行创建一个新的预处理语句,单条提交sql;而batch模式重复使用已经预处理的语句,
并且批量执行所有更新语句,显然batch性能将更优;

2.但batch模式也有自己的问题,比如在Insert操作时,在事务没有提交之前,是没有办法获取到自增的id,这在某型情形下是不符合业务要求的;

3. 在测试中使用simple模式提交10000条数据,时间为18248 毫秒,batch模式为5023 ,性能提高70%;

4.通过走码和研读spring相关文件发现,在同一事务中batch模式和simple模式之间无法转换,由于本项目一开始选择了simple模式,所以碰到需要批量更新时,只能在单独的事务中进行;

5.在代码中使用batch模式可以使用以下方式:

//从spring注入原有的sqlSessionTemplate
@Autowired
private SqlSessionTemplate sqlSessionTemplate;

public void testInsertBatchByTrue() {

//新获取一个模式为BATCH,自动提交为false的session
//如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出
SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(
ExecutorType.BATCH, false);
//通过新的session获取mapper
    fooMapper = session.getMapper(FooMapper.class);
    int size = 10000;
    try {
        for (int i = 0; i < size; i++) {
                Foo foo = new Foo();
                foo.setName(String.valueOf(System.currentTimeMillis()));
                fooMapper.insert(foo);
                    if (i % 1000 == 0 || i == size - 1) {
                    //手动每1000个一提交,提交后无法回滚
session.commit();
                    //清理缓存,防止溢出
                            session.clearCache();
        }
        }
    } catch (Exception e) {
//没有提交的数据可以回滚
                        session.rollback();
            } finally {
session.close();
        }
    }

6.上述代码没有使用spring的事务,改动手动控制,如果和原spring事务一起使用,将无法回滚,必须注意,最好单独使用;
分享到:
评论

相关推荐

    基于SpringBoot的银行二维码交易处理系统设计与实现

    - **性能测试**:使用JMeter工具进行压力测试,评估系统在高并发情况下的表现。 - **优化策略**:根据测试结果,对系统性能进行优化,包括但不限于增加缓存机制、优化数据库查询语句等。 #### 六、结论 本系统通过...

    (源码)基于OpenTelemetry的GPS设备监控项目.zip

    # 基于OpenTelemetry的GPS设备监控项目 ## 项目简介 这是一个基于OpenTelemetry的GPS设备监控项目,旨在收集GPS设备的定位和运动数据,并通过OpenTelemetry协议发送到指定的接收端。本项目主要面向开发人员和对GPS监控感兴趣的用户。 ## 项目的主要特性和功能 1. 实时数据收集实时收集GPS设备的定位数据,包括经度、纬度、速度等信息。 2. 多传感器支持集成加速度计等其他传感器,收集更丰富的运动数据。 3. 数据传输通过OpenTelemetry协议将数据发送到接收端,支持多种数据传输方式。 4. 可视化界面具有可视化界面,可实时查看设备位置和运动数据。 5. 硬件兼容性支持多种硬件平台,具有良好的可扩展性和兼容性。 ## 安装使用步骤 1. 复制代码复制本项目代码并导入到Arduino或其他支持的微控制器开发环境。 2. 配置参数配置WiFi连接和OpenTelemetry接收端的参数。

    网络安全:实验四:IKE实验(Cisco仿真-注意版本号,版本不一致打不开)

    网络安全:实验四:IKE实验(Cisco仿真-注意版本号,版本不一致打不开)

    电力电子领域模块化多电平变换器(MMC)仿真解析:380V交流-800V直流整流/逆变关键技术

    内容概要:本文详细介绍了模块化多电平变换器(MMC)在380V交流到800V直流转换中的仿真搭建过程及其关键技术。首先解释了MMC的基本原理,包括子模块的结构和工作方式。接着探讨了环流抑制的方法,通过模型预测控制和其他控制策略减少不必要的损耗和提高系统稳定性。此外,讨论了相间均能和电容均压的技术手段,确保系统的功率均衡和电压一致性。最后,描述了具体的仿真搭建步骤,包括电路拓扑的选择、参数设定、控制策略实现以及仿真结果分析。文中还提供了详细的仿真介绍文档和参考文献,帮助读者更好地理解和应用这些技术。 适合人群:电力电子领域的研究人员和技术人员,尤其是对MMC仿真感兴趣的初学者和有一定基础的研究者。 使用场景及目标:适用于希望深入了解MMC工作原理及其仿真技术的人群。主要目标是掌握MMC的仿真搭建方法,理解环流抑制、相间均能和电容均压等关键技术的应用,最终能够独立完成类似的仿真项目。 其他说明:文章不仅提供了理论知识,还包括了大量的代码示例和具体的操作指南,使读者能够在实践中验证所学内容。同时,提供的参考文献有助于进一步深入研究相关课题。

    YTCB2509 非接触式转速测量仪 20250323

    题目:非接触式转速测量仪 主控:STM32 显示屏:Oled 电机驱动:L298 电机(带编码器可测速的三线电机) 按键(增速或者减速等)

    MCU固件加锁系统的多设备并行处理与自定义密钥保护方案

    内容概要:本文详细介绍了基于MCU的固件加锁系统,涵盖上位机和设备端的实现细节。上位机部分使用C#和Python实现了多线程并行处理框架,能够高效地管理和监控多个设备的同时加锁操作。设备端代码采用C语言编写,实现了闪存写保护、状态机控制以及通信协议设计,确保加锁过程的安全性和可靠性。文中还讨论了硬件抽象层的移植性、通信协议的优化、密钥处理的安全措施等问题,并分享了实际应用中的经验和技巧。 适合人群:嵌入式系统开发人员、MCU固件工程师、硬件安全研究人员。 使用场景及目标:适用于需要批量处理固件加锁的生产环境,如智能锁具、水表等产品的生产线。目标是提供一种轻量级、高效的固件保护方案,防止未经授权的固件烧录和逆向工程。 其他说明:文中提供了详细的代码片段和技术细节,帮助读者理解和实现类似的固件加锁系统。强调了安全性、稳定性和易移植性的设计原则。

    房地产培训 -物业客服礼仪培训.ppt

    房地产培训 -物业客服礼仪培训.ppt

    智慧城市数字化城管建设方案Word(121页).doc

    智慧城管,作为现代城市管理的新模式,正以其独特的魅力引领着城市管理方式的深刻变革。这一解决方案融合了物联网、云计算、大数据等前沿技术,为城市打造了一套高效、智能、全面的管理体系。 想象一下,城市的每一个角落都被智能感知设备所覆盖,从街道的监控摄像头到井盖下的传感器,它们就像城市的神经末梢,实时收集着城市运行的点点滴滴。这些数据通过高速网络汇聚到智慧城管平台,经过大数据分析处理,为管理者提供了精准的决策支持。无论是违规停车的自动抓拍,还是公共设施损坏的及时预警,智慧城管都能迅速响应,让城市管理变得更加主动、高效。 更令人兴奋的是,智慧城管不仅提升了管理效率,还极大地丰富了服务手段。市民可以通过手机APP一键上报问题,从路灯不亮到井盖丢失,各种问题都能得到快速处理。同时,智慧城管平台还整合了城市服务资源,如网上办事大厅、公共信息查询等,让市民享受到了更加便捷、高效的城市服务。此外,智慧城管还通过大数据分析,为城市规划、交通管理、环境保护等领域提供了科学依据,助力城市可持续发展。 总之,智慧城管综合解决方案以其先进的技术、丰富的功能和卓越的性能,为城市管理注入了新的活力。它不仅让城市管理变得更加智能、高效,还极大地提升了市民的幸福感和满意度。对于致力于提升城市管理水平的城市管理者来说,智慧城管无疑是一个值得深入研究和推广的解决方案。

    (源码)基于C++编程语言的智能家居控制系统.zip

    # 基于C++编程语言的智能家居控制系统 ## 项目简介 本项目是一个基于C++编程语言的智能家居控制系统,旨在通过Arduino平台实现对家居设备的智能控制,包括气候控制、安全警报、门禁系统等功能。通过WiFi连接和MQTT协议,实现了对家中环境参数的监控和调整,以及通过RFID识别和MQTT消息处理实现基本的家居自动化功能。 ## 项目的主要特性和功能 1. 气候控制通过DHT传感器监控客厅、厨房和卧室的温度和湿度,并根据设定的目标值自动调整室内环境。 2. 安全警报通过红外人体感应器和磁传感器监测家中的异常情况,如入侵或门窗未关,并通过RGB灯和MQTT消息通知用户。 3. 门禁系统通过RFID识别和键盘输入实现身份验证,控制门的开启和关闭。 4. OLED显示在OLED屏幕上显示当前时间、温度、湿度等信息,提供用户友好的交互界面。 5. MQTT通信使用MQTT协议与服务器通信,实现消息的发布和订阅,便于远程控制和日志记录。

    (源码)基于Spring Boot的数据交易平台.zip

    # 基于Spring Boot的数据交易平台 ## 项目简介 本项目是一个基于区块链技术的数据交易与鉴权平台,名为“DataMall”。它提供了一个安全、可靠的环境,用于数据的交易和鉴权,确保数据的完整性和安全性。平台采用Spring Boot作为后端开发框架,结合MyBatis Plus进行数据库操作,支持支付宝支付和阿里云OSS存储服务。 ## 项目的主要特性和功能 1. 用户管理包括用户注册、登录、找回密码、账号信息查询等功能。 2. 商品管理用户可以发布、修改、删除商品,管理员可以冻结或解冻商品。 3. 订单管理用户可以提交订单、支付订单,管理员可以查询订单详情。 4. 权限管理管理员可以管理角色和权限,确保系统的安全性和可控性。 5. 支付功能集成支付宝支付功能,支持用户在线支付。 6. 文件存储使用阿里云OSS进行文件存储,确保数据的安全性和可靠性。

    VIC水文模型径流模拟:零基础Python实践教程及视频教学指导

    内容概要:本文详细介绍了VIC水文模型的径流模拟方法,涵盖从环境搭建、数据预处理到模型参数率定的全过程。首先讲解了如何使用Python进行土壤分层、能量平衡计算以及产流计算的具体实现,接着分享了模型执行流程的关键步骤,如气象数据处理、参数配置和优化技巧。文中还提供了许多实际操作中的经验和技巧,帮助初学者避开常见陷阱。最后强调了模型可视化验证的重要性,并给出了具体的代码示例。 适合人群:对水文学感兴趣的研究人员、学生以及希望深入了解水文模型应用的技术爱好者。 使用场景及目标:适用于希望通过Python实现VIC水文模型径流模拟的学习者,旨在帮助他们掌握从理论到实践的完整流程,提高模型构建能力和数据分析水平。 其他说明:作者结合自身实践经验,提供了一系列实用的操作指南和技术细节,使读者能够更好地理解和应用VIC水文模型。

    452047732824847酒店民宿预订管理系统(含12个月预订明细)1.xlsx

    452047732824847酒店民宿预订管理系统(含12个月预订明细)1.xlsx

    极紫外超透镜设计与FDTD仿真:基于导模共振的50nm波长硅-空气纳米柱结构

    内容概要:本文详细介绍了如何复现2023年发表于《Science》的论文 'Extreme ultraviolet metalens by vacuum guiding' 中提出的极紫外超透镜设计。文章涵盖了硅-空气纳米柱结构的传输相位计算、理想相位分布的构建、FDTD仿真步骤及其结果分析。通过Matlab和Python代码示例,展示了如何计算不同纳米柱半径对应的传输相位,并利用FDTD仿真验证设计的有效性。此外,文中还讨论了仿真过程中遇到的问题及解决方法,如相位库构建、相位梯度约束、倏逝波修正等。 适合人群:从事光学、特别是极紫外光学领域的研究人员和技术人员,以及对超透镜设计感兴趣的科研工作者。 使用场景及目标:①理解和掌握极紫外超透镜的设计原理;②通过FDTD仿真验证设计方案;③拓展应用于其他极紫外光学器件的设计,如极紫外全息和涡旋光生成器。 其他说明:文章不仅提供了详细的代码示例,还分享了许多实用的仿真技巧和实践经验,有助于提高极紫外光学系统的性能。

    基于粒子群算法PSO的宽带消色差超透镜Matlab设计与FDTD仿真

    内容概要:本文详细介绍了利用粒子群算法(PSO)在Matlab中设计宽带消色差超透镜的方法及其FDTD仿真验证。首先,通过定义合理的初始参数范围和适应度函数,将超透镜的纳米结构参数(如纳米柱的直径、高度、周期)作为粒子的位置,采用PSO进行优化。适应度函数结合了预存的相位延迟查找表和实时FDTD仿真结果,确保优化过程中能够高效评估不同结构参数的效果。文中还讨论了惯性权重的动态调整、震荡因子的引入以及适应度函数中物理约束的添加,以提高优化效果并防止陷入局部最优。最终,通过FDTD仿真验证优化结果,展示了在可见光波段内的聚焦效率和焦斑尺寸的改进。 适合人群:从事光学设计、超材料研究、电磁仿真领域的科研人员和技术开发者。 使用场景及目标:适用于需要设计高性能宽带消色差超透镜的研究项目,旨在通过粒子群算法优化超透镜结构参数,减少色差并提高聚焦效率。 其他说明:文中提供了详细的Matlab代码片段和FDTD仿真设置示例,帮助读者更好地理解和实施该方法。此外,强调了在实际应用中需要注意的参数选择和物理约束,以确保设计方案的可行性和有效性。

    道路裂纹检测中语义分割数据集的构建与应用

    内容概要:本文详细介绍了700张道路裂纹语义分割数据集的构成及其应用场景。数据集采用VOC格式,包含原图、mask二值图和标注文件。文中提供了处理mask、标注以及数据集划分的方法,并讨论了如何将这些数据用于训练分割网络,如UNet。此外,还探讨了数据增强技术和损失函数的选择,以应对数据量不足和类别不平衡的问题。最后,介绍了滑动窗口预测方法,确保大尺寸图像的边缘处理更加平滑。 适合人群:从事计算机视觉、图像处理领域的研究人员和技术开发者,尤其是关注道路维护和安全监测的人群。 使用场景及目标:适用于需要进行道路裂纹检测的应用场景,如城市基础设施维护、自动驾驶车辆的安全检测等。主要目标是提高裂纹检测的准确性,优化模型性能,提升检测效率。 其他说明:文中提供的代码片段和技巧有助于初学者快速上手语义分割任务,同时也为经验丰富的研究者提供了优化模型的具体思路。

    (源码)基于MSP430G2553微控制器的多功能应用平台.zip

    # 基于MSP430G2553微控制器的多功能应用平台 ## 项目简介 本项目是一个基于MSP430G2553微控制器的多功能平台。集成多种硬件模块,如超声波传感器、七段LED显示器、蓝牙通信、ESP8266 WiFi模块等,并提供对应驱动和函数库,用于实现复杂控制和应用。 ## 项目的主要特性和功能 1. 丰富的硬件接口借助MSP430G2553微控制器的GPIO、ADC、PWM等接口,与各类硬件模块通信和控制。 2. 模块化设计将硬件接口、驱动、应用等功能分离,便于扩展和维护。 3. 齐全的功能涵盖超声波距离测量、LED显示、蓝牙通信、WiFi连接等多种功能。 4. 高效的中断处理利用MSP430G2553的硬件中断处理功能,实现高效的数据接收和响应。 5. 数据处理优化使用环形缓冲区处理接收到的数据,提升数据处理效率。 6. 清晰的代码结构代码结构清晰,易于理解和修改,适合嵌入式系统开发。 ## 安装使用步骤

    (源码)基于megaTiny和nRF24L01+的无线BootLoader.zip

    # 基于megaTiny和nRF24L01+的无线BootLoader ## 项目简介 本项目是一个基于megaTiny系列微控制器(如ATtiny1614)和nRF24L01+无线模块的BootLoader实现。它允许用户通过无线方式对嵌入式系统进行固件更新,适用于那些难以通过传统方式访问或更新固件的场景。 ## 项目的主要特性和功能 1. 无线固件更新通过nRF24L01+无线模块接收新的固件代码,并将其烧写到MCU的Flash内存中。 2. 小型化设计BootLoader代码占用空间小,适合资源有限的嵌入式系统。 3. 多设备支持支持多种megaTiny系列芯片,如ATtiny1614、ATtiny814等。 4. CRC校验使用内置的CRC硬件进行数据校验,确保固件更新的正确性。 5. API支持提供API供应用程序使用,方便集成和扩展。 6. Arduino兼容支持与Arduino开发环境的集成,方便开发者使用。 ## 安装使用步骤

    Screenshot_2025-04-17-20-35-51-251_tv.danmaku.bili.jpg

    Screenshot_2025-04-17-20-35-51-251_tv.danmaku.bili.jpg

    (源码)基于Vulkan和OpenGL的Yutrel渲染引擎.zip

    # 基于Vulkan和OpenGL的Yutrel渲染引擎 ## 项目简介 Yutrel是一个个人开发的小型渲染引擎,旨在学习和实践OpenGL、Vulkan和C++17技术,同时加深对游戏引擎架构的理解。该项目主要用于实现各种图形学算法,并提供一个方便的平台来学习和实现这些算法。 ## 项目的主要特性和功能 ECS架构采用类似Bevy引擎的ECS架构进行资源管理,窗口、渲染器等均作为ECS系统的资源。 多层架构渲染器内部类似游戏引擎的架构,分为核心(core)、平台(platform)、功能(function)、资源(resource)四层。 RHI封装提供对渲染API的RHI封装,方便进行创建、绑定、删除等操作。 预定义组件提供部分预定义的组件,如变换、光照、摄像机、模型、动画、skybox等。 渲染算法实现多种渲染算法,如PBR渲染、IBL烘焙、阴影贴图、OIT顺序无关透明、SSAO、视锥体裁剪、骨骼动画等。 ## 安装使用步骤

    根据充电桩与电动汽车通信协议(国标),用python编写的协议解析工具 支持其中常用的二十来种协议解析+源码(毕业设计&课程设计&项目开发)

    根据充电桩与电动汽车通信协议(国标),用python编写的协议解析工具。支持其中常用的二十来种协议解析+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 根据充电桩与电动汽车通信协议(国标),用python编写的协议解析工具。支持其中常用的二十来种协议解析+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 根据充电桩与电动汽车通信协议(国标),用python编写的协议解析工具。支持其中常用的二十来种协议解析+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 根据充电桩与电动汽车通信协议(国标),用python编写的协议解析工具。支持其中常用的二十来种协议解析+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 根据充电桩与电动汽车通信协议(国标),用python编写的协议解析工具。支持其中常用的二十来种协议解析+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档

Global site tag (gtag.js) - Google Analytics