您的位置:首页 > 编程语言 > Java开发

关于spring和mybatis集成后如何进行批处理总结

2015-10-21 17:17 941 查看

网上百度一下,发现各种各样的版本,真的是各种试,现在就来分享一下我运行过程中是如何处理的吧

1、首先一种基本的批处理是采用unionall拼接sql,导致问题sql过长,耗时,性能不好,且达到一定量会超出sql长度限制,简单的批处理可以应付。


<insertid="insertMethodOne"parameterType="List">
insertintogdgk_test_user(id,name,password)(
<foreachcollection="list"item="item"index="index"separator="unionall">
select#{item.id,jdbcType=VARCHAR},#{item.name,jdbcType=VARCHAR},#{item.password,jdbcType=VARCHAR}fromdual
</foreach>
)
</insert>
一般20字段以内的表新增,数据2000条以内可用,经过测试,但是,这个是非常重要,对于数据表字段中存在大数据如:CLOB类型,就不能使用这种批量新增方法。

2、采用dao层循环,得到sqlsession统一commit,这种方式几乎可以应付你所有的情况

@Autowired
privateSqlSessionTemplatesqlSession;

publicvoidsaveBatch(List<TBsImpNews>modelList){
SqlSessionsession=sqlSession.getSqlSessionFactory().openSession(ExecutorType.BATCH,false);
try{
//批量生成新闻主键
for(TBsImpNewstBsImpNews:modelList){
//批量生成新闻主键
StringimpnewsId=String.valueOf(Long.valueOf(getSequenceNextId(SEQ_T_BS_IMP_NEWS)));
tBsImpNews.setImpnewsId(impnewsId);
sqlSession.insert("com.rocktrue.fastdev.wvsp.impnews.TBsImpNewsMapper.insertTBsImpNews",tBsImpNews);
for(Stringurl:tBsImpNews.getImgList()){
//批量生成新闻图片主键
StringimniId=String.valueOf(Long.valueOf(getSequenceNextId(SEQ_T_BS_IMP_NEWS_IMG)));
TBsImpNewsImgtBsImpNewsImg=newTBsImpNewsImg();
tBsImpNewsImg.setImniId(imniId);
tBsImpNewsImg.setImpnewsId(impnewsId);
tBsImpNewsImg.setImniSrc(url);
sqlSession.insert("com.rocktrue.fastdev.wvsp.impnews.TBsImpNewsImgMapper.insertTBsImpNewsImg",tBsImpNewsImg);
}
}
session.commit();
//清理缓存,防止溢出
session.clearCache();
}catch(Exceptione){
e.printStackTrace();
session.rollback();
}finally{
session.close();
}
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: