1、使用Statement 批量插入

public void batchInsertJdbc1() throws Exception
{DataSource ds  = (DataSource) SpringContextHolder.getBean( "dataSource" );Connection    conn    = ds.getConnection();Statement st  = conn.createStatement();String        sql = "insert into user(userid,username,birthday,salary) values('3000','武二郞',now(),8000);";for ( int i = 0; i < 5000; i++ ){st.addBatch( sql );}st.executeBatch();
}

2、使用PreparedStatement 批量插入,速度比1.1快

private void jdbc2() throws Exception
{Connection     conn    = DBUtil.getConnection();String            sql = "insert into user values (?,?,?,?)";PreparedStatement  st  = conn.prepareStatement( sql );for ( int i = 0; i < 5000; i++ ){st.setString( 1, "3001" );st.setString( 2, "武二郞" );st.setDate( 3, null );st.setDouble( 4, 9000 );st.addBatch();}st.executeBatch();System.out.println( new Date() );st.close();conn.close();
}

3、使用mybatis 批量插入 , 速度超快(分批插入,每批1000行)

public void batchInsert( List<UserPO> list )
{int    len = list.size();int  mod = 1000;int n   = len % mod == 0 ? len / mod : len / mod + 1;int    start   = 0;int    pos = 0;int    k   = mod;List subList = null;for ( int i = 0; i < n; i++ ){if ( len / (i + 1) < mod ){k = len % mod;}pos  += k;subList = list.subList( start, pos );userDao.batchInsert( subList );start += mod;}
}public void batchInsert( List<UserPO> list )
{this.insert( "cn.demo.dao.IUserDao.batchInsert", list );
}< insert id = "batchInsert" parameterType = "java.util.List" >insert into user( userid, username )values<foreach item = "o" collection = "list" index = "ind" separator = ",">(#{o.userId}, # { o.userName })< / foreach >< / insert>

4、通过SqlSession批量插入

public void batchInsertJdbc3( List<UserPO> list ) throws Exception
{greenhousegases.com( this.getClass() + " batchInsertJdbc3" );/** 新获取一个模式为BATCH,自动提交为false的session* 如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出*/SqlSession  session = this.getSqlSessionTemplate().getSqlSessionFactory().openSession( ExecutorType.BATCH, false );UserPO      user    = null;try{for ( int i = 0; i < list.size(); i++ ){user = list.get( i );session.insert( "cn.demo.dao.IUserDao.insertUser", user );if ( (i + 1) % 1000 == 0 || i == list.size() - 1 ){/** greenhousegases.com(this.getClass()+" batchInsertJdbc3 commit " + i);* 手动每1000个一提交,提交后无法回滚*/session.commit();/* 清理缓存,防止溢出 */session.clearCache();}}}catch ( Exception e ) {session.rollback();e.printStackTrace();}finally {session.close();}
}

如果有什么想法在下方评论区留言吧!

java list分批_Java实用笔记——mybatis批量导入相关推荐

  1. 拉勾教育Java训练营学习感受/学习笔记--MyBatis

    拉勾教育Java训练营学习感受/学习笔记–MyBatis 文章目录 拉勾教育Java训练营学习感受/学习笔记--MyBatis 1.普通jdbc操作流程以及问题 1.1 流程 1.2 问题 2.自定义 ...

  2. java水印图片_JAVA实用案例之图片水印开发

    写在最前面 上周零零碎碎花了一周的时间研究水印的开发,现在终于写了个入门级的Demo,做下笔记同时分享出来供大家参考. Demo是在我上次写的 JAVA实用案例之文件导入导出(POI方式) 框架基础上 ...

  3. java excel批量导入数据库数据_Java实现Excel数据批量导入数据库

    Java实现Excel数据批量导入数据库 概述: 这个小工具类是工作中的一个小插曲哦,因为提数的时候需要跨数据库导数... 有的是需要从oracle导入mysql ,有的是从mysql导入oracle ...

  4. java runnable 启动_Java开发笔记(九十七)利用Runnable启动线程

    前面介绍了线程的基本用法,按理说足够一般的场合使用了,只是每次开辟新线程,都得单独定义专门的线程类,着实开销不小.注意到新线程内部真正需要开发者重写的仅有run方法,其实就是一段代码块,分线程启动之后 ...

  5. java自学语法_Java自学笔记(一):基础知识

    目录 第一个Java程序 public class HelloWorld { //类名必须与文件名相同 public static void main(String[] args) { System. ...

  6. java读书心得_Java读书笔记 20100815

    Java是一种语言.特点:1.简单,2.面向对象,3.跨平台,4.高性能 jdk是什么 Java Development Kit   -------------Java  开发  工具包 Jdk   ...

  7. java 数据 权限_Java如何利用Mybatis进行数据权限控制详解

    前言 权限控制主要分为两块,认证(Authentication)与授权(Authorization).认证之后确认了身份正确,业务系统就会进行授权,现在业界比较流行的模型就是RBAC(Role-Bas ...

  8. java 字符串赋值_Java 学习笔记(二)变量

    标识符  标识符就是名字.类名,变量名,方法名,参数名等  标识符的命名规则  以字母.下划线或美元符号$开头,不能以数字开头 其后可以是字母.数组或美元符号$ 区分大小写 避免使用关键字  ...

  9. java 文件缓冲区_Java开发笔记(八十六)通过缓冲区读写文件

    前面介绍了利用文件写入器和文件读取器来读写文件,因为FileWriter与FileReader读写的数据以字符为单位,所以这种读写文件的方式被称作"字符流I/O",其中字母I代表输 ...

最新文章

  1. 广西师范大学计算机调剂难吗,2014年广西师范大学考研调剂过来人给的建议
  2. 使用Dockerfile构建SpringBoot应用镜像
  3. jq之callback
  4. iar atof 问题
  5. 如何制作频数折线图(详细)
  6. 在同时使用animation和translate时,translate无效
  7. 创建office一直转圈_Microsoft Office 2019 VL for Mac(office系列全套装)
  8. vue 使用 createjs 绘制扇形
  9. 上海拍牌服务器协议,上海拍牌服务器地址
  10. vue中 给v-for渲染的元素动态添加移除类名
  11. javaweb大全:地址来自 孤傲苍狼
  12. canal deployer+canal adapter自动同步MySQL数据到ElasticSearch
  13. 《软件架构评估》学习笔记
  14. element el-input特殊字符校验
  15. 四、全国计算机三级数据库考试——操作题(6—10套)
  16. 木马也办“假身份证” 数字签名面临信任危机
  17. formData上传文件(传参附带其他参数)
  18. WEB-1-前端三剑客
  19. 2019 让自己变的更加优秀(文末新年福利)
  20. iso20000和iso9001的区别

热门文章

  1. Qt获取本地网卡信息
  2. Qt线程间通信-信号与槽通信
  3. Qt5.7| C/C++ 超级简单一学就会的仿QQ宠物
  4. python字符串数组切片性能_python – 为数组切片赋值很慢
  5. n条直线相交最多有几个邻补角_【初中数学】102条做初中几何辅导线的规律
  6. java打字游戏代码_牛逼啊!一个随时随地写Python代码的神器
  7. Php循环函数嵌套javascript,JS循环嵌套问题?
  8. 东北大学软件项目管理与过程改进_可视化看板——汽车研发项目管理成功的奥秘...
  9. qt int转换成qstring_Qt 加载cern-root库 并调用root类
  10. 高效的半同步/半异步模式的实现