【RuoYi-Vue-Plus】学习笔记 22 - Mybatis-Plus(四)批量插入功能(中篇)saveBatch 实现与分析(MyBatis-Plus 源码)

2023-10-27

前言

承接上篇,继续聊聊批量插入功能。

其实这个功能本身不算太难,所以本文会对比一下框架 V3.5.0 以及 V4.0.1 两个版本之间的差异。

参考目录

批量插入功能的代码实现

参照官方文档:

这里是引用

以框架中 TestDemo 为例。

V3.X 版本使用

  1. 实现类中继承 ServicePlusImplIServicePlus 实现类)
    在这里插入图片描述
    这一步一般是框架中使用代码生成功能时就会做好,如果是自己添加的实现类也是继承相应类即可。
  2. 调用方法 service.saveBatch
    在这里插入图片描述

V4.X 版本使用

  1. Mapper 继承 BaseMapperPlus
    在这里插入图片描述
    这一步同样是框架中使用代码生成功能时就会做好。
  2. 调用方法 mapper.insertBatch
    在这里插入图片描述

Debug & 测试结果(V4.X)

BaseMapperPlus#insertBatch
在这里插入图片描述
SqlHelper#executeBatch
在这里插入图片描述
可以看到控制台的输出是单条的,注意这里是一个 sqlSession 完成所有插入,并不是 1000 个sqlSession 来执行。

数据库表数据:
在这里插入图片描述
至此功能测试完成。

因为底层执行流程一样,所以 V3.X 版本就不再赘述了。

批量插入功能的调用流程分析

##、流程简图(重点)

因为是不同版本对比进行说明,所以画了简图方便说明。
在这里插入图片描述

##、版本差异及其原因

Service 差异:
在这里插入图片描述
在这里插入图片描述
差异原因:

从上面简图可以看出来,底层的调用流程并不复杂,并且底层方法都是一样的,在群里 狮子大佬 也说过:

在这里插入图片描述

至于为什么不用 Service 的而要重新写到 Mapper 中,在框架更新日志中可以找到答案:

这里是引用

V3.#2、ServicePlusImpl#saveBatch

在这里插入图片描述

V3.#3、ServiceImpl#executeBatch

在这里插入图片描述

V4.#2、BaseMapperPlus#insertBatch

在这里插入图片描述
在下面的 insertBatch 方法其实和 ServiceImpl#executeBatch(V3.#3)调用的方法就是同一个了。

#4、SqlHelper#executeBatch

在这里插入图片描述

#5、SqlHelper#executeBatch

在这里插入图片描述
所有的流程到这里就结束了。

需要注意的点(下篇主要内容)

  1. 要使用批处理功能,需要在配置文件中(spring.datasource.dynamic.datasource.master.url)添加以下参数:rewriteBatchedStatements=true
  2. 相比起 SQL 注入器,两种插入方式哪个速度更优?

以上两点,我会放到下篇去进行说明。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【RuoYi-Vue-Plus】学习笔记 22 - Mybatis-Plus(四)批量插入功能(中篇)saveBatch 实现与分析(MyBatis-Plus 源码) 的相关文章

随机推荐

  • 降级、熔断、限流

    降级 熔断和限流是在高并发环境中保护系统稳定性的重要手段 它们通过对服务的调用进行控制和限制 防止系统因突发负载而崩溃或出现性能下降 1 降级 Degradation 概念 降级是指在系统遇到异常或高负载等情况下 暂时关闭或者切换到一些功能
  • React中的Suspence组件解决抖动问题

    React 中的 Suspense 组件是用来处理异步渲染的 当我们需要异步加载某些组件或数据时 通常会出现一个 抖动 问题 即页面在等待异步加载完成时会出现一些不必要的视觉变化 比如页面出现空白或者加载指示器 Suspense 可以解决这
  • MySQL中的SQL语句

    文章目录 MySQL中的SQL语句 SQL通用语法 SQL分类 DDL 1 数据库操作 1 查询所有数据库 2 查询当前数据库 3 创建数据库 4 删除数据库 5 切换数据库 2 表操作 2 1 表操作 查询创建 1 查询当前数据库所有表
  • 微信小程序与H5页面传值

    关于微信小程序与H5传值 一 当前问题 1 小程序无法操作dom 2 小程序无法与H5传值 解决方法 1 小程序无法与H5传值 2 微信小程序实时获取坐标 3 微信小程序使用websocket 一 当前问题 1 小程序无法操作dom 因为微
  • 可持续能源技术真的能改变世界么?

    随着全球气候变化日趋严重 能源转型成为解决气候问题和提高全球能源安全合理性的必要措施之一 可持续能源技术因其对环境的友好性和可再生性而成为了当前热点话题 你认为可持续能源技术真的能改变世界吗 一起来说说你的看法吧 一 你在工作或生活中接触过
  • Day41-50 JavaWeb

    JavaWeb Java web 1 基本概念 1 1 前言 web开发 web 网页的意思 www baidu com 静态web html css 提供给所有人看的数据 始终不会发生变化 动态web 淘宝 几乎所有的网站 提供给所有人看
  • 提高效率,夺取胜利,AI如何助力运动员高效训练?

    引言 竞技体育和科技的相遇 似乎并不是太过新鲜的话题 职业棒球经理人比利 比恩运用数据量化分析取代了球探 并借助数据模型和数据分析帮助球员最终创造出20连胜的纪录 这是2011年上映改编自真实故事的电影 点球成金 中的情节 不同于电影 在今
  • 101序列检测器设计

    101序列检测电路设计 该题对于和我一样即将参加研究生考试的考生来说十分重要 在2014年山东大学研究生入学考试数字电路831和2018年山东大学研究生入学考试数字电路906的试卷中均考到该题 这说明我们要对数据序列检测电路高度重视 设计心
  • django添加字典格式的数据

    使用方法 Model类 objects create 字典格式数据 示例 比如一个model class MyModel models Model data1 models CharField max length 255 data2 mo
  • Could not find matching constructor for: org.gradle.util.Clock()

    检出Android studio中的grdle配置 示例 project中的com android tools build gradle版本号为 2 3 3 dependencies classpath com android tools
  • Access to DialectResolutionInfo cannot be null when ‘hibernate.dialect‘ not set。

    Access to DialectResolutionInfo cannot be null when hibernate dialect not set 2021 08 15最新的spring boot JPA mysql 出现这个错误
  • PHP yield大文件读取 与 数据库大数据量读取

    PHP yield大文件读取 与 数据库大数据量读取 yield php5 6版本才有的函数 作用是 实现 生成器 作用的在读取文件的时候 可以一行一行的读取 简单的说可以理解为 php版本的非缓冲查询 意思即是 把数据一行行 读取到php
  • python中字符串转元组时的小技巧

    目录 一 问题引入 二 问题深入 1 第一次尝试 2 第二次尝试 3 第三次尝试 三 总结 一 问题引入 最近在做问答系统项目时 发现一个很有意思的小问题 目的 我把txt里的内容读取出来 以元组对形式保存在列表中统一格式 然后再保存到sq
  • 一款接口自动化神器—开源接口测试平台Lim(Less is More)

    前言 对于传统的实现接口自动化的方案往往是搭建自动化框架 通过excel编写用例来驱动执行 例如常见的万金油技术栈组合 excel 编写用例 pytest 用例执行 allure 测试报告 等 很多公司往往是通过自动化框架而非测试平台来实现
  • maven文件配置

  • pycharm2017.1专业版破解

    资源下载 1 JetBrains Pycharm https pan baidu com s 1qZCpIR6 密码 rvrn 2 JetbrainsCrack 2 6 2 jar https pan baidu com s 1i5h0v4
  • 【AcWing】0-1背包+完全背包+多重背包+分组背包(C语言)

    1 01背包 1 1 题目 有 NN 件物品和一个容量是 VV 的背包 每件物品只能使用一次 第 ii 件物品的体积是 vivi 价值是 wiwi 求解将哪些物品装入背包 可使这些物品的总体积不超过背包容量 且总价值最大 输出最大价值 输入
  • kube-prometheus 系列4 支持自定义指标HPA

    kube prometheus 安装之后 虽然安装了prometheus adapter 但默认是没有注册这个apiservice v1beta1 custom metrics k8s io 所以默认无法支持自定义指标 我们可以使用如下ya
  • uniapp判断是否第一次登录,否则直接进入

    通过存储是否第一次登录的标志来判断 在登录页面的onLoad里面 uni setStorageSync first falg true 在app vue的onLaunch里面 let that this const saveToken un
  • 【RuoYi-Vue-Plus】学习笔记 22 - Mybatis-Plus(四)批量插入功能(中篇)saveBatch 实现与分析(MyBatis-Plus 源码)

    文章目录 前言 参考目录 批量插入功能的代码实现 V3 X 版本使用 V4 X 版本使用 Debug 测试结果 V4 X 批量插入功能的调用流程分析 流程简图 重点 版本差异及其原因 V3 2 ServicePlusImpl saveBat