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

mybatis 批量插入和批量修改

在处理数据的时候,用mybatis 要进行批量插入,还要根据字段更新关联表的字段内容。记录下如何使用的。

批量插入:

写法:

mapper:

void insertBatchDispatch(@Param("dispatches") List<Dispatch> dispatches);

xml:

<sql id="DispatchColumn">
    DISPATCH_ID, SERVICE, CIRCUIT, ROUTE
</sql> 

<insert id="insertBatchDispatch" parameterType="java.util.List">
    insert into dispatch_service
    ( <include refid="DispatchColumn"></include> )
    values
    <foreach collection ="dispatches" item="item" separator =",">
        (#{item.dispatchId}, #{item.service},
        #{item.circuit}, #{item.route})
    </foreach >
</insert>

分批插入:

如何一次性插入很多,会执行报错。可以分批插入,插入个1000条

分批数据处理可以用skip和limit

参考:

public static void main(String args[]) {
    String data = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20";
    List<String> datas = Arrays.asList(data.split(","));
    System.out.println(datas.size() + " "+JSON.toJSONString(datas));
    int loopSize = 3;
    int dataSize = datas.size();
    // 向上取整
    int loop =  dataSize / loopSize + (dataSize % loopSize != 0 ? 1 : 0);

    System.out.println(loop);
    for (int i = 0; i < loop; i++) {
        List<String> skipData = ListUtils.emptyIfNull(datas).stream().skip(i * loopSize).limit(loopSize).collect(Collectors.toList());
        System.out.println(skipData);
    }
}

如何进行批量修改呢?

批量修改:

写法

mapper:

void updateBatchDetail(@Param("details") List<CircuitDetail> details);

xml:

<update id="updateBatchDetail"  parameterType="java.util.List">
    <foreach collection="details" item="item" index="index" open="" close="" separator=";">
        update circuit_detail
        set service = #{item.service,jdbcType=VARCHAR},
         circuit = #{item.circuit,jdbcType=VARCHAR},
        route =  #{item.route,jdbcType=VARCHAR}
        where dispatch_id = #{item.dispatchId}
    </foreach>
</update>

执行报错,怎么处理呢?

处理:

mybatis支持批量操作

开启批量执行sql的开关,在拼装mysql链接的url时,为其加上allowMultiQueries参数,设置为true,即allowMultiQueries=true,如下:

mysql

​​​​​​​jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/databaseName?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true

sqlserver

datasource.url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=databaseName;allowMultiQueries=true

 总结:

        批量插入和批量修改,要注意控制数量,批量修改要记得开启批量执行的操作,在连接的url上添加allowMultiQueries=true

相关文章:

  • (附源码)php投票系统 毕业设计 121500
  • Sulfo-Cy5羧酸,Sulfo-Cyanine5 carboxylic acid,水溶性荧光染料标记羧基,激发波长(nm):649发射波长(nm):665
  • 深度神经网络的特征表示,深度神经网络通俗理解
  • 南大通用GBase 8a MPP Cluster管理工具简介
  • 前端700行代码项目练习--小米官网(仅html、css实现)
  • 简单入门linux命令
  • Spring Cloud Gateway 服务器性能异常,以及优化策略
  • 云原生中间件RocketMQ-核心原理之同步_异步刷盘,同步_异步复制解析
  • 计算机网络——数据链路层の选择题整理
  • joi:定义多个自定义错误信息
  • 限流相关算法
  • java计算机毕业设计阳明湖风景区订票系统源码+数据库+系统+lw文档+mybatis+运行部署
  • Java 中所有的锁
  • 【基于Arduino的垃圾分类装置开发教程二传感器执行器操作】
  • java中static关键字具有什么功能呢?
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 0基础学习移动端适配
  • 2019年如何成为全栈工程师?
  • co模块的前端实现
  • jquery ajax学习笔记
  • Redis 中的布隆过滤器
  • Vue ES6 Jade Scss Webpack Gulp
  • XForms - 更强大的Form
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 从PHP迁移至Golang - 基础篇
  • 从tcpdump抓包看TCP/IP协议
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 聚类分析——Kmeans
  • 你真的知道 == 和 equals 的区别吗?
  • 前端技术周刊 2019-02-11 Serverless
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 找一份好的前端工作,起点很重要
  • 正则表达式
  • 最近的计划
  • 阿里云服务器如何修改远程端口?
  • ​ArcGIS Pro 如何批量删除字段
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • # Panda3d 碰撞检测系统介绍
  • #预处理和函数的对比以及条件编译
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (¥1011)-(一千零一拾一元整)输出
  • (C++20) consteval立即函数
  • (分类)KNN算法- 参数调优
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (论文阅读40-45)图像描述1
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)关于pipe()的详细解析
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET 读取 JSON格式的数据
  • .Net8 Blazor 尝鲜
  • @Valid和@NotNull字段校验使用