废话不多说,直接进入主题:
关于使用mybatis批量插入数据的时候,经常使用的是 foreach在xml里批量更新,代码示如:
INSERT INTO zybgod (id,name,name1,name2,name3,name4,name5,name6,name7,name8) VALUES (#{item.id},#{item.name},#{item.name1},#{item.name2},#{item.name3},# {item.name4},#{item.name5},#{item.name6},#{item.name7},#{item.name8})
这种情况是完全可以的,但是当数据量比较大的时候,速度就明显的下降了,我测试了一下,插入5W条数据的时候耗时大概4-5秒。这时候再才用这种写法肯定是欠妥的。
接下引入新的批量插入写法,利用Mybatis自带的BATCH进行批量更新,这里主要介绍实践,理论自行查看源码或google。
首先引入SqlSessionTemplate
@Autowired private SqlSessionTemplate sqlSessionTemplate;
然后
SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH);
TQuotaDao mapper = sqlSession.getMapper(TQuotaDao.class);
for (int i = 1; i < 50000; i++) {
Map map = new HashMap();
map.put("id",i);
map.put("name",i);
map.put("name1",i);
map.put("name2",i);
map.put("name3",i);
map.put("name4",i);
map.put("name5",i);
map.put("name6",i);
map.put("name7",i);
map.put("name8",i);
mapper.zybgod2(map);
}
//提交到数据库,保存数据
sqlSession.flushStatements();
TQuotaDao是我写dao层的类,zybgod2()的插入的方法,注入这里的插入是单条插入不是批量。
放上单条插入xml:
INSERT INTO zybgod (id,name,name1,name2,name3,name4,name5,name6,name7,name8) VALUES (#{id},#{name},#{name1},#{name2},#{name3},#{name4},#{name5},#{name6},#{name7},#{name8})



