zoukankan      html  css  js  c++  java
  • 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());
            }  

      

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

      

      

  • 相关阅读:
    如何在一个for语句中迭代多个对象(2.7)
    yield列表反转 islice切片(2.6)
    yield和生成器, 通过斐波那契数列学习(2.5)
    python实现线程池(2.4)
    LOJ 3120: 洛谷 P5401: 「CTS2019 | CTSC2019」珍珠
    瞎写的理性愉悦:正整数幂和与伯努利数
    bzoj 3328: PYXFIB
    LOJ 3119: 洛谷 P5400: 「CTS2019 | CTSC2019」随机立方体
    洛谷 P5345: 【XR-1】快乐肥宅
    LOJ 3089: 洛谷 P5319: 「BJOI2019」奥术神杖
  • 原文地址:https://www.cnblogs.com/amberdyy/p/10944616.html
Copyright © 2011-2022 走看看