java list分批_Java实用笔记——mybatis批量导入
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批量导入相关推荐
- 拉勾教育Java训练营学习感受/学习笔记--MyBatis
拉勾教育Java训练营学习感受/学习笔记–MyBatis 文章目录 拉勾教育Java训练营学习感受/学习笔记--MyBatis 1.普通jdbc操作流程以及问题 1.1 流程 1.2 问题 2.自定义 ...
- java水印图片_JAVA实用案例之图片水印开发
写在最前面 上周零零碎碎花了一周的时间研究水印的开发,现在终于写了个入门级的Demo,做下笔记同时分享出来供大家参考. Demo是在我上次写的 JAVA实用案例之文件导入导出(POI方式) 框架基础上 ...
- java excel批量导入数据库数据_Java实现Excel数据批量导入数据库
Java实现Excel数据批量导入数据库 概述: 这个小工具类是工作中的一个小插曲哦,因为提数的时候需要跨数据库导数... 有的是需要从oracle导入mysql ,有的是从mysql导入oracle ...
- java runnable 启动_Java开发笔记(九十七)利用Runnable启动线程
前面介绍了线程的基本用法,按理说足够一般的场合使用了,只是每次开辟新线程,都得单独定义专门的线程类,着实开销不小.注意到新线程内部真正需要开发者重写的仅有run方法,其实就是一段代码块,分线程启动之后 ...
- java自学语法_Java自学笔记(一):基础知识
目录 第一个Java程序 public class HelloWorld { //类名必须与文件名相同 public static void main(String[] args) { System. ...
- java读书心得_Java读书笔记 20100815
Java是一种语言.特点:1.简单,2.面向对象,3.跨平台,4.高性能 jdk是什么 Java Development Kit -------------Java 开发 工具包 Jdk ...
- java 数据 权限_Java如何利用Mybatis进行数据权限控制详解
前言 权限控制主要分为两块,认证(Authentication)与授权(Authorization).认证之后确认了身份正确,业务系统就会进行授权,现在业界比较流行的模型就是RBAC(Role-Bas ...
- java 字符串赋值_Java 学习笔记(二)变量
标识符 标识符就是名字.类名,变量名,方法名,参数名等 标识符的命名规则 以字母.下划线或美元符号$开头,不能以数字开头 其后可以是字母.数组或美元符号$ 区分大小写 避免使用关键字 ...
- java 文件缓冲区_Java开发笔记(八十六)通过缓冲区读写文件
前面介绍了利用文件写入器和文件读取器来读写文件,因为FileWriter与FileReader读写的数据以字符为单位,所以这种读写文件的方式被称作"字符流I/O",其中字母I代表输 ...
最新文章
- 广西师范大学计算机调剂难吗,2014年广西师范大学考研调剂过来人给的建议
- 使用Dockerfile构建SpringBoot应用镜像
- jq之callback
- iar atof 问题
- 如何制作频数折线图(详细)
- 在同时使用animation和translate时,translate无效
- 创建office一直转圈_Microsoft Office 2019 VL for Mac(office系列全套装)
- vue 使用 createjs 绘制扇形
- 上海拍牌服务器协议,上海拍牌服务器地址
- vue中 给v-for渲染的元素动态添加移除类名
- javaweb大全:地址来自 孤傲苍狼
- canal deployer+canal adapter自动同步MySQL数据到ElasticSearch
- 《软件架构评估》学习笔记
- element el-input特殊字符校验
- 四、全国计算机三级数据库考试——操作题(6—10套)
- 木马也办“假身份证” 数字签名面临信任危机
- formData上传文件(传参附带其他参数)
- WEB-1-前端三剑客
- 2019 让自己变的更加优秀(文末新年福利)
- iso20000和iso9001的区别
热门文章
- Qt获取本地网卡信息
- Qt线程间通信-信号与槽通信
- Qt5.7| C/C++ 超级简单一学就会的仿QQ宠物
- python字符串数组切片性能_python – 为数组切片赋值很慢
- n条直线相交最多有几个邻补角_【初中数学】102条做初中几何辅导线的规律
- java打字游戏代码_牛逼啊!一个随时随地写Python代码的神器
- Php循环函数嵌套javascript,JS循环嵌套问题?
- 东北大学软件项目管理与过程改进_可视化看板——汽车研发项目管理成功的奥秘...
- qt int转换成qstring_Qt 加载cern-root库 并调用root类
- 高效的半同步/半异步模式的实现