java list分批_Java实用笔记——mybatis批量导入
生活随笔
收集整理的這篇文章主要介紹了
java list分批_Java实用笔记——mybatis批量导入
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
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" );/** 新獲取一個(gè)模式為BATCH,自動(dòng)提交為false的session* 如果自動(dòng)提交設(shè)置為true,將無(wú)法控制提交的條數(shù),改為最后統(tǒng)一提交,可能導(dǎo)致內(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);* 手動(dòng)每1000個(gè)一提交,提交后無(wú)法回滾*/session.commit();/* 清理緩存,防止溢出 */session.clearCache();}}}catch ( Exception e ) {session.rollback();e.printStackTrace();}finally {session.close();} }如果有什么想法在下方評(píng)論區(qū)留言吧!
總結(jié)
以上是生活随笔為你收集整理的java list分批_Java实用笔记——mybatis批量导入的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea项目结构树状展示_「软件项目管理
- 下一篇: java面试题_Java面试题总结(20