mybatis批量插入

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

mybatis批量插入

邦道技术分享   2020-03-31 我要评论

第一种:普通for循环插入

①junit类

@Test

public void testInsertBatch2() throws Exception {

    long start = System.currentTimeMillis();

    User user;

    SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(false);

    UserDao mapper = sqlSession.getMapper(UserDao.class);

    for (int i = 0; i < 500; i++) {

        user = new User();

        user.setId("test" + i);

        user.setName("name" + i);

        user.setDelFlag("0");

        mapper.insert(user);

    }

    sqlSession.commit();

    long end = System.currentTimeMillis();

    System.out.println("---------------" + (start - end) + "---------------");

}

  ②xml配置

<insert id="insert">

    INSERT INTO t_user (id, name, del_flag)

          VALUES(#{id}, #{name}, #{delFlag})

</insert>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第二种:mybatis BATCH模式插入

①junit类

@Test

public void testInsertBatch2() throws Exception {

    long start = System.currentTimeMillis();

    User user;

    SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);//跟上述sql区别

    UserDao mapper = sqlSession.getMapper(UserDao.class);

    for (int i = 0; i < 500; i++) {

        user = new User();

        user.setId("test" + i);

        user.setName("name" + i);

        user.setDelFlag("0");

        mapper.insert(user);

    }

    sqlSession.commit();

    long end = System.currentTimeMillis();

    System.out.println("---------------" + (start - end) + "---------------");

}
  ②xml配置与第一种②中使用相同

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第三种:foreach方式插入

①junit类

@Test

public void testInsertBatch() throws Exception {

    long start = System.currentTimeMillis();

    List<User> list = new ArrayList<>();

    User user;

    for (int i = 0; i < 10000; i++) {

        user = new User();

        user.setId("test" + i);

        user.setName("name" + i);

        user.setDelFlag("0");

        list.add(user);

    }

    userService.insertBatch(list);

    long end = System.currentTimeMillis();

    System.out.println("---------------" + (start - end) + "---------------");

}


 ②xml配置

<insert id="insertBatch">

    INSERT INTO t_user

            (id, name, del_flag)

    VALUES

    <foreach collection ="list" item="user" separator =",">

         (#{user.id}, #{user.name}, #{user.delFlag})

    </foreach >

</insert>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

特别注意:mysql默认接受sql的大小是1048576(1M),即第三种方式若数据量超过1M会报如下异常:

(可通过调整MySQL安装目录下的my.ini文件中[mysqld]段的"max_allowed_packet = 1M")

最后测定,如果对于几千条以上的数据量批量插入,第三种方式效率更高。

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们