Mybatis批量插入的代码实现
简单的学习总结一下,希望能帮到需要的同学!
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()); }
总结:至此就可以实现简单的批量插入了,数据量少的时候,性能优势不是很明显,可以使用单条插入;当数据量很大的时候,此时就能凸显批量插入的优势。