您好,登錄后才能下訂單哦!
小編給大家分享一下Mybatis兩種不同批量插入方式的區(qū)別有哪些,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
本文使用 Mybatis 進(jìn)行批量插入,比較兩種不同的插入方式的區(qū)別。
批量插入注意事項(xiàng):
1、連接數(shù)據(jù)庫時(shí)添加參數(shù) allowMultiQueries=true,支持多語句執(zhí)行,批處理
2、數(shù)據(jù)庫是否支持大量數(shù)據(jù)寫入,設(shè)置 max_allowed_packet參數(shù)保證批次提交的數(shù)據(jù)量
public void batchDemo() { long start = System.currentTimeMillis(); List<User> list = new ArrayList<>(); for (int i = 0; i < 5000; i++) { User user = new User(); user.setId(UUID.randomUUID().toString()); user.setName("feiyangyang"); user.setPwd("feiyangyang"); list.add(user); } userService.batchForeach(list); long end = System.currentTimeMillis(); System.out.println("---------------" + (start - end) + "---------------"); }
<insert id="batchForeach" parameterType="com.fyy.druid.entity.User"> insert into user(id,`name`,pwd) values <foreach collection ="userList" item="user" separator =","> (#{user.id}, #{user.name}, #{user.pwd}) </foreach> </insert>
public void batchInsert() { long start = System.currentTimeMillis(); SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH); UserService mapper = sqlSession.getMapper(UserService.class); for (int i = 0; i < 5000; i++) { User user = new User(); user.setId(UUID.randomUUID().toString()); user.setName("feiyangyang"); user.setPwd("feiyangyang"); mapper.batchInsert(user); } sqlSession.commit(); long end = System.currentTimeMillis(); System.out.println("---------------" + (start - end) + " ---------------"); }
注意:batch模式也有自己的問題,比如在Insert操作時(shí),在事務(wù)沒有提交之前,是沒有辦法獲取到自增的id,這在某型情形下是不符合業(yè)務(wù)要求的
拼接sql (ms) | batch插入 (ms) | |
---|---|---|
500條 | 1744 | 639 |
2000條 | 26966 | 2473 |
5000條 | 173668 | 7382 |
看完了這篇文章,相信你對(duì)“Mybatis兩種不同批量插入方式的區(qū)別有哪些”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。