关于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();
}
}
相关文章推荐
- 用java来调用OpenCV (二)
- spring自定义cache
- SpringMVC配置easyui-datagrid
- java建立url请求获取数据
- Java命名规范和代码风格
- Struts2使用ModelDriven
- 用java来调用OpenCV (一)
- 关于Java异常一段很有意思的代码
- 转:visualvm监控远程机器上的Java程序
- springmvc视图解析顺序2
- eclipse性能优化
- OC、C#与JAVA语法特点一些异同(差集&交集)
- Struts中Action的线程访问安全问题
- Struts2常用标签(转载)--【SSH】
- jdk环境变量配置
- Java USB串口编程(64位和32位)
- Java --- Xstream使用
- java 操作hbase的数据
- Java Synchronized
- spring中xml标签加载解析的一般过程