写点什么

Mybatis 批量插入数据

作者:源字节1号
  • 2022 年 10 月 10 日
    浙江
  • 本文字数:910 字

    阅读完需:约 3 分钟

Mybatis批量插入数据

前言

在很多业务场景中,我们需要批量录入数据。那么意味着我们需要以最高效的方式去实现功能,同时也需要保证软件的便捷性与可维护性,开源字节使用 MyBatis foreach 标签方式优雅的实现了材料的出入库。源码开放,可前往码云仓库免费获取。



MyBatis 简介

MyBatis 是一个支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索封装。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

Mybatis 的三种批量插入方式

1、循环插入

studentList.stream().forEach(student -> studentMapper.insert(student));
复制代码

2、foreach 标签

<insert id="insert" parameterType="Student">    INSERT INTO tb_student (name, age, phone, address, class_id) VALUES (#{name},#{age},#{phone},#{address},#{classId})</insert><insert id="insertBatch">    INSERT INTO tb_student (name, age, phone, address, class_id) VALUES    <foreach collection="list" separator="," item="item">        (#{item.name},#{item.age},#{item.phone},#{item.address},#{item.classId})    </foreach></insert>
复制代码

3、批处理

SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH,false);StudentMapper studentMapperNew = sqlSession.getMapper(StudentMapper.class);studentList.stream().forEach(student -> studentMapperNew.insert(student));sqlSession.commit();sqlSession.clearCache();
复制代码

三种插入方式在不同数据量下的表现,测试结果:



三种方式中,批处理的方式效率是最高的,尤其是在数据量大的情况下尤为明显。其次是 foreach 标签,foreach 标签是通过拼接 SQL 语句的方式完成批量操作的。但是当拼接的 SQL 过多,导致 SQL 大小超过了 MySQL 服务器中 max_allowed_packet 变量的值时,会导致操作失败,抛出 PacketTooBigException 异常。最后是循环插入的方式,这种方式在数据量小的时候可以使用,在数据量大的情况下效率要低很多。


如若转载,请注明出处:开源字节   https://sourcebyte.cn/article/243.html

用户头像

源字节1号

关注

一个着迷于技术又喜欢不断折腾的技术活跃者 2022.03.09 加入

一个着迷于技术又喜欢不断折腾的技术活跃者。喜欢并热爱编程,执着于努力之后所带来的美好生活!

评论

发布
暂无评论
Mybatis批量插入数据_软件开发_源字节1号_InfoQ写作社区