日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java list分批_Java实用笔记——mybatis批量导入

發(fā)布時間:2025/3/15 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java list分批_Java实用笔记——mybatis批量导入 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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,將無法控制提交的條數(shù),改為最后統(tǒng)一提交,可能導致內(nèi)存溢出*/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();} }

如果有什么想法在下方評論區(qū)留言吧!

總結

以上是生活随笔為你收集整理的java list分批_Java实用笔记——mybatis批量导入的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。