最近導(dǎo)入表格數(shù)據(jù)時(shí)需要同時(shí)插入修改大量數(shù)據(jù),研究了一下有三種實(shí)現(xiàn)方式
1、用for循環(huán)調(diào)用sql插入數(shù)據(jù)
public void insert(List<HzbsErpBom> bomList){
for(HzbsErpBom bom : bomList) {
bomService.insertHzbsErpBom(bom);
}
}
這種方式插入大量數(shù)據(jù)時(shí),效率非常底下,不推薦
2、利用mybatis的foreach來實(shí)現(xiàn)循環(huán)插入
public void insert(List<HzbsErpBom> bomList){
bomService.insertHzbsErpBomList(bomList);
}
<insert id="insertHzbsErpBomList" parameterType="List">
insert into hzbs_erp_bom (id,create_user,create_time)
<foreach collection="list" open="values" item="item" separator=",">
(
#{item.id},
#{item.createUser},
#{item.createTime}
)
</foreach>
</insert>
這種方式插入大量數(shù)據(jù)時(shí),好處是不用頻繁訪問數(shù)據(jù)庫,一條sql搞定,效率比較高,缺點(diǎn)是當(dāng)數(shù)據(jù)量太大時(shí),會(huì)出現(xiàn)拼接的sql語句超長(zhǎng)而執(zhí)行失敗,所以當(dāng)數(shù)據(jù)量太大時(shí),也不推薦
3、利用批處理的方式,設(shè)置手動(dòng)提交,利用for循環(huán)生成sql,生成完畢后,一次性提交sql
public void insert(List<HzbsErpBom> bomList){
//設(shè)置批量手動(dòng)提交
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
HzbsErpBomMapper hzbsErpBomMapper = sqlSession.getMapper(HzbsErpBomMapper.class);
bomList.stream().forEach(bom -> hzbsErpBomMapper.insertHzbsErpBom(bom));
//提交數(shù)據(jù)
sqlSession.commit();
sqlSession.close();
}
這種方式可以說是集第一種和第二種方式的優(yōu)點(diǎn)于一身,既可以提高運(yùn)行效率,又可以保證大數(shù)據(jù)量時(shí)執(zhí)行成功,大數(shù)據(jù)量時(shí)推薦使用這種方式。文章來源:http://www.zghlxwxcb.cn/news/detail-561750.html
好了,我知道的就這三種方式了,如果大家知道有更好的方式,歡迎評(píng)論區(qū)討論。如果本文章對(duì)大家有幫助,希望大家點(diǎn)贊收藏支持一下!文章來源地址http://www.zghlxwxcb.cn/news/detail-561750.html
到了這里,關(guān)于SpringBoot+MyBatis批量插入數(shù)據(jù)的三種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!