首页 > 其他分享 >MyBatis-Plus批量插入方法saveBatch

MyBatis-Plus批量插入方法saveBatch

时间:2023-08-11 17:37:06浏览次数:37  
标签:语句 insert 一条 批量 插入 saveBatch 插入方法 MyBatis

1. saveBatch能否提高插入的效率?

先说结论,saveBatch()方法也是一条一条的插入,也就是说它会产生多条insert语句,而不是一条insert语句,所以它不是真正的批量插入,更不能提高插入效率。

看看代码就全明白了

从代码看,循环一条一条的插入,每次都是一个sqlSession.insert()

因此,saveBatch()并不能提高插入的效率。想要实现一条insert语句批量插入的效果,还得自己写insert语句

2. 如果insert批量插入的时候失败了怎么办?

插入数据的时候,经常会遇到非空校验、唯一约束等等,如果不满足的话就插入失败了

当我们使用insert批量插入的时候,如果中间有一条或多条数据插入失败了,此时这一批次的所有数据都不会插入成功。因为这是一条insert语句,它是一个原子操作,要么所有的都插入成功,要么都失败。

如果希望忽略那些插入失败的数据,可以加ignore关键字,例如:

除了可以指定IGNORE关键字以外,还可以加上 ON DUPLICATE KEY UPDATE 表示重复的话执行update语句

详见 https://dev.mysql.com/doc/refman/8.0/en/insert.html

3. 批量插入的数据条数有没有限制

条数没有限制,但是发送给MySQL服务器的SQL语句大小有限制,默认是4M。因此,一次批量插多少条取决于每一条数据有多大。

 

标签:语句,insert,一条,批量,插入,saveBatch,插入方法,MyBatis
From: https://www.cnblogs.com/cjsblog/p/17623543.html

相关文章

  • MybatisPlus备忘录
    getOne时多条报错问题日常使用可能大多数用的是第一种,当多条就会报错,当我们不希望他报错且能返回一条数据时,可以使用第二、三种方法。当然第二种方法内部也就是第三种方法的逻辑1.tempManager.getOne(Wrappers.<TempDO>query().lambda());2.tempManager.getOne(Wrappers.<T......
  • mybatis缓存
    一级缓存一级缓存是同一session内缓存,随着session的关闭而被清除。先看下效果Stringresource="mybatis-config.xml";SqlSessionFactorysessionFactory=newSqlSessionFactoryBuilder().build(Resources.getResourceAsStream(resource));SqlSes......
  • Mybatis
    MybatisMyBatis是一款优秀的持久层框架,用于简化JDBC的开发。官网:https://mybatis.org/mybatis-3/zh/index.html入门使用Mybatis操作数据库,就是在Mybatis中编写SQL查询代码,发送给数据库执行,数据库执行后返回结果。Mybatis操作数据库的步骤:1.准备工作(创建springboot工程、......
  • Mybatis-plus SQL效率插件PerformanceInterceptor无效->替换为p6spy
    使用mybatis-plus时,需要加入执行的sql分析发现mybatis-plus中的PerformanceInterceptor无效了查了信息发现3.2.0版本之后把这个功能可剔除了可同等替换为p6spy插件添加依赖第一<dependency><groupId>p6spy</groupId><artifactId>p6sp......
  • Springboot 3.x 使用PageHelper实现MyBatis分页查询
    开发环境SpringBoot3.0.1Maven工程JDKOpenJdk17.0.6引入pom依赖<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version></depende......
  • mybatis源码阅读
    配置解析首先来看一个简单使用例子Stringresource="mybatis-config.xml";//读取配置,创建sessionFactorySqlSessionFactorysessionFactory=newSqlSessionFactoryBuilder().build(Resources.getResourceAsStream(resource));//opensessionSqlSessionsqlSession=sess......
  • MyBatis Plus 大数据量查询优化
    大数据量操作的场景大致如下:数据迁移数据导出批量处理数据在实际工作中当指定查询数据过大时,我们一般使用分页查询的方式一页一页的将数据放到内存处理。但有些情况不需要分页的方式查询数据或分很大一页查询数据时,如果一下子将数据全部加载出来到内存中,很可能会发生OOM(内存溢出);......
  • Mybatis
    MybatisresultMap首先要了解,一个resultMap中都有些什么常用的玩意:展开代码<resultMapid="唯一标识"type="映射的entity对象的绝对路径"><idcolumn="表主键字段"jdbcType="字段类型"property="映射entity对象的主键属性"/><resultco......
  • MyBatis Generator 学习记录
    目录参考资料什么是MyBatisGenerator?运行MyBatisGenerator方式mavenplugin方式java代码方式参考资料官方文档什么是MyBatisGenerator?MyBatisGenerator是MyBatis代码生成工具。运行MyBatisGenerator方式命令行antmaven运行java代码运行eclipse......
  • mybatis的基础操作
    mybatis的基础操作常用的操作,增删改查1.增加@Insert("insertinto表名(字段名)values(字段值)publicvoidinsert(参数);对于要将传递的参数用到sql语句中需要用到#{}例如:参数为idinsertinto表名(id)values(#{id})后一个id为参数的名字然而对于多个参数......