简单的学习总结一下,希望能帮到需要的同学!
1.mapper.xml文件sql语句如下:
<insert id="insertBatch" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
insert into linklist (version_id, link_name,link_url,case_total,
pass_rate,bug_num,remarks,isDelete)
values
<foreach collection="list" item = "linkList" index = "index" separator=",">
(#{linkList.versionId,jdbcType=INTEGER},
#{linkList.linkName,jdbcType=VARCHAR},#{linkList.linkUrl,jdbcType=VARCHAR},
#{linkList.caseTotal,jdbcType=INTEGER},#{linkList.passRate,jdbcType=INTEGER},
#{linkList.bugNum,jdbcType=INTEGER},#{linkList.remarks,jdbcType=VARCHAR},
#{linkList.isDelete,jdbcType=INTEGER})
</foreach>
</insert>
2.Mybatis-config.xml文件中需要加上下面的配置:
<mappers>
<mapper resource="mapper/Mapper.xml"/>
</mappers>
3.dao层代码:
/** * 批量插入 * @param linkLists * @return */ int insertBatch(List<LinkList> linkLists);
4.service层代码如下:
/**
* 批量插入
* @param linkLists
* @return
*/
int insertBatch(List<LinkList> linkLists);
5.impl接口实现:
@Override
public int insertBatch(List<LinkList> linkLists) {
return linkListDao.insertBatch(linkLists);
}
6.controller层实现代码如下:
if (size > 1) {//批量插入
long beginTime = System.currentTimeMillis();
System.out.println("multi begin time:" + beginTime);
SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);//关闭session的自动提交;
try {
int result = sqlSession.insert("com.netease.klqa.report.dao.LinkListDao.insertBatch", insertData);
sqlSession.commit();
// System.out.println("dyy" + result);
} finally {
sqlSession.close();
}
System.out.println("multi end time:" + (System.currentTimeMillis() - beginTime));
} else if (size == 1) {//单条插入
System.out.println("one begin time:" + System.currentTimeMillis());
LinkList linkList = insertData.get(0);
if (linkList != null) {
linkList.setVersionId(versionId);
linkListService.insert(linkList);
}
System.out.println("one end time:" + System.currentTimeMillis());
}
总结:至此就可以实现简单的批量插入了,数据量少的时候,性能优势不是很明显,可以使用单条插入;当数据量很大的时候,此时就能凸显批量插入的优势。