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());
        }  

  

 总结:至此就可以实现简单的批量插入了,数据量少的时候,性能优势不是很明显,可以使用单条插入;当数据量很大的时候,此时就能凸显批量插入的优势。

  

  

posted on 2019-05-29 16:31  不怕风雨的向日葵  阅读(548)  评论(0编辑  收藏  举报

导航