说明:
mysql执行inset语句并未明确说明限制多少条语句,但是sql语句在超过一定的大小后,执行就会报错,百度得知mysql 5.7 最大语句执行最大不能超过4M,当然,在mysql执行批量插入时,如果批量插入的语句过长则将会报错,所以我们需要限制一下批量插入的数量,分批进行插入,分享两个场景

1. 场景一
当我们在代码中经过一系列的逻辑处理后,得到了一个未知长度的list,需要将这个未知长度的list插入到数据库中(未知长度的list可能会超过1w条数据,或者超过10w条数据,再或者更长,我们无法预支得到的长度并且长度)

java 核心代码:

        /** 经过各种逻辑处理获取到的未知长度list*/List<RSUserInfo> userInfos = rSUserInfoService.selectRSUserInfoList(rSUserInfo);/** 批量加入数据库 核心代码*/int batchNum = 5000;  // 设置批量导入条数,可根据业务背景进行变动int start, end;/** 计算出需要执行批量导入的次数*/int size = userInfos.size() % batchNum == 0 ? userInfos.size() / batchNum : userInfos.size() / batchNum + 1;for (int i = 0; i < size; i++) {start = i * batchNum;end = Math.min(i * batchNum + batchNum - 1, userInfos.size() - 1);/** 创建一个新的list*/List<RSUserInfo> newList = new ArrayList<>();for (int k = start; k <= end; k++) {/** 遍历未userInfos插入newList*/newList.add(userInfos.get(k));}/** 执行批量导入sql  参数 newList*/this.rSUserInfoService.insertUserInfos(newList);}return AjaxResult.success("批量插入数据成功!");

mapper层:

int insertUserInfos(List<RSUserInfo> newList);

mapper.xml

    <insert id="insertUserInfos" parameterType="list">insert into r_s_user_info(user_name, user_sex, user_age, phone_no, wechat_no,user_type, birthday, remarks,create_time, update_time)values<foreach collection="list" item="item" separator=",">(#{item.userName},#{item.userSex},#{item.userAge},#{item.phoneNo},#{item.wechatNo},#{item.userType},#{item.birthday},#{item.remarks},#{item.createTime},#{item.updateTime})</foreach></insert>

思路分析
限制下每次批量导入的条数,计算出需要执行批量导入的次数,在分次进行批量导入,限制条数是为了不让sql语句大小超过mysql的最大限制,防止sql语句执行报错

1. 场景二
当我们需要将A表中的数据进行处理后和过滤后,插入到B表中,在A表中获取到的数据在处理过程中条数不会变多,如果存在过滤处理后,数据条数只会变得更少,可以进行分页查询A表中的数据,处理后直接批量插入到B表,限制查询的数据条数,从而限制sql语句的大小
如果在A表中的数据处理后可能会产生比之前更多的数据(无法预估的长度),这样情况就符合场景一中的使用,即直接将场景一中的代码引入使用

不建议的用法
将多条语句导入到数据库中,也可以在java的for循环中,每次循环一条数据,然后执行一次数据库插入操作,这样方法对于极少数据没什么影响,如果数据量超过了上万条,执行时间无线变长,而且对于数据库的资源消耗是很大的,不建议这样使用

总结:
代码中需要使用到批量导入数据库的场景时,限制导入的条数是对数据库比较友好的交互,即使可以预测到批量导入的条数,其实加上每次批量限制对于代码的执行效率影响是可以忽略不记的,在保证代码不会报错的前提下优化代码执行效率

MySql 批量插入数据库Java代码实现思路相关推荐

  1. MYSQL批量插入数据库实现语句性能分析

    MYSQL批量插入数据库实现语句性能分析 假定我们的表结构如下 代码如下   CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( ...

  2. mysql不支持addbatch_【MySql】Java 批量插入数据库addBatch

    //addBatch批量插入数据库 public static void insertCommentToMySql(Set commentList) { Iterator it = commentLi ...

  3. java应用程序接口批量访问_spring中使用mybatis实现批量插入的示例代码

    有3种实现方式:foreach,spring事务,以及ExecutorType.BATCH. 1. foreach方式 这种方式实际是对SQL语句进行拼接,生成一个长长的SQL,对很多变量进行绑定.如 ...

  4. java随机生成车牌_JDBC:随机生成车牌号,批量插入数据库

    package InsertTest;/** 单客户端:批量插入*/import java.sql.Connection; import java.sql.DriverManager; import ...

  5. MySQL批量插入数据的几种方法

    最近公司要求测试数据库的性能,就上网查了一些批量插入数据的代码,发现有好几种不同的用法,插入同样数据的耗时也有区别 别的先不说,先上一段代码与君共享 方法一: package com.bigdata; ...

  6. mysql批量插入 增加参数_MySql 的批量操作,要加rewriteBatchedStatements参数

    MySql 的批量操作,要加rewriteBatchedStatements参数 作者:赵磊 博客:http://elf8848.iteye.com ------------------------- ...

  7. Mysql 批量插入大量数据的两种方案以及优缺点(分别是 5W 条数据和 10W 条数据)

    Mysql 批量插入(5W 条数据和 10W 条数据) 1.批量插入思路 一般是有两种不同的思路: 1.for 循环批量插入 2.生成一条 SQL 语句,比如 insert into user(id, ...

  8. c mysql 批量插入_c#之mysql四种带事务批量插入

    前言 对于像我这样的业务程序员开发一些表单内容是家常便饭的事情,说道表单 我们都避免不了多行内容的提交,多行内容保存,自然要用到数据库,如果循环打扰我数据库,数据库也会觉得很累,从而增加数据库服务器压 ...

  9. sql批量插入数据mysql_MYSQL批量插入数据库实现语句性能分析

    假定我们的表结构如下: CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ) NOT NULL, value VARCH ...

最新文章

  1. 在项目管理工具Redmine中使用SubVersion进行版本管理(转)
  2. 【400】numpy.pad 为数组加垫(迷宫类题目)
  3. 保护模式及其编程——实模式与保护模式的切换
  4. 字符设备驱动初体验(hello驱动)
  5. 观察者模式(Head First设计模式学习2)
  6. 线性筛法--------2013年1月2日
  7. nosql数据库MongoDB的用法
  8. 20/23种设计模式---C++实现
  9. Spring Cloud Hystrix服务容错 (学习总结)
  10. 捷宇高拍仪D系列 javaweb集成进项目
  11. Linux文件系统及常用命令
  12. 地铁路线程序C语言,个人作业-北京地铁出行路线规划命令行程序完成总结
  13. VS-code输入感叹号没有提示
  14. GPG对称加密与非对称加密
  15. MATLAB中deg2rad和rad2deg函数的使用
  16. 二分图最大匹配—匈牙利算法
  17. 使用ipmi调节r410的风扇转速
  18. bzoj4416 阶乘字符串 子集dp
  19. uniapp组件-Card卡片
  20. matlab模糊自适应pid控制仿真程序,模糊自适应整定PID控制matlab仿真程序(刘金锟-先进PID控制及其MATLAB仿真)...

热门文章

  1. mooc付费视频下载
  2. 自然语言处理(NLP)学习笔记——HMM与CRF模型
  3. babel-loader babel-core
  4. python读取压缩文件时乱码,zipfile解压缩包,出现中文乱码问题问题
  5. 软件开发工程师知识_您作为软件开发人员的知识组合
  6. Lessonnbsp;135nbsp;Thenbsp;latestnbsp;reportnbsp;最…
  7. 【操作系统】第八章——进程调度算法
  8. XML简单操作类、只可操作单行数据(可直接使用)
  9. windows程序崩溃调试终极武器
  10. Java对正则表达式的支持(手机、身份证校验)