Mybatis批量插入,返回主键ID不成功,巨坑记录

 更新时间:2023年12月08日 15:04:05   作者:程序员Forlan  
这篇文章主要介绍了Mybatis批量插入,返回主键ID不成功,巨坑记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、场景说明

批量插入,返回主键ID报错

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.binding.BindingException: Parameter ‘id’ not found. Available parameters are [entitys, param1]

二、代码

dao.java

int insertBatch(@Param("entitys") List<ForlanDTO> entities);

dao.xml

    <insert id="insertBatch" useGeneratedKeys="true" keyProperty="id">
        insert into forlan_batch_insert(name,age)
        values
        <foreach collection="entitys" item="entity" index="index" separator=",">
            (#{entity.name}, #{entity.age})
        </foreach>
    </insert>

mybatis版本号为:3.4.2

<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.4.2</version>
</dependency>

三、解决方案

1、换mybatis版本

调整版本号为3.5.2

<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.5.2</version>
</dependency>

换了版本号后,就正常了,其它版本大家可以测试下,具体从什么版本后修复的,这个暂时没查到

2、调整代码

dao.java

int insertBatch(@Param("list") List<ForlanDTO> entities);

dao.xml

    <insert id="insertBatch" useGeneratedKeys="true" keyProperty="id">
        insert into forlan_batch_insert(name,age)
        values
        <foreach collection="list" item="entity" index="index" separator=",">
            (#{entity.name}, #{entity.age})
        </foreach>
    </insert>

关键点:foreach里的collection必须是list,不然就会报错

四、拓展说明

关于返回主键ID,需要在insert标签中添加,useGeneratedKeys=“true” keyProperty=“id”,useGeneratedKeys和keyProperty必须配合使用,keyProperty的字段就是返回的主键ID

mybatis3.3.1及以上的版本,才支持批量插入返回主键ID

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • springboot vue完成发送接口请求显示响应头信息

    springboot vue完成发送接口请求显示响应头信息

    这篇文章主要为大家介绍了springboot+vue完成发送接口请求显示响应头信息,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Java实现读取及生成Excel文件的方法

    Java实现读取及生成Excel文件的方法

    这篇文章主要介绍了Java实现读取及生成Excel文件的方法,结合实例形式分析了java通过引入第三方jar包poi-3.0.1-FINAL-20070705.jar实现针对Excel文件的读取及生成功能,需要的朋友可以参考下
    2017-12-12
  • Spring服务注解有哪些

    Spring服务注解有哪些

    这篇文章主要介绍了Spring服务注解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2016-11-11
  • 关于Java创建线程的2种方式以及对比

    关于Java创建线程的2种方式以及对比

    这篇文章主要给大家介绍了关于Java创建线程的2种方式以及对比的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • SpringBoot中使用Knife4j生成接口文档的示例详解

    SpringBoot中使用Knife4j生成接口文档的示例详解

    Knife4j 是一个基于 Swagger 的增强 UI 实现,主要用于为 Spring Boot 应用程序生成 API 接口文档,本文将详细介绍如何在 Spring Boot 中集成 Knife4j,并通过不同注解来生成清晰的接口文档,需要的可以参考一下
    2025-06-06
  • 使用eclipse打包Maven项目的实现步骤

    使用eclipse打包Maven项目的实现步骤

    本文主要介绍了使用eclipse打包Maven项目的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • Spring Boot启动流程示例详解

    Spring Boot启动流程示例详解

    Spring Boot是Spring官方推出的一个快速构建独立运行、生产级别Spring应用的框架,它的核心目标是简化Spring应用的搭建与部署,本文给大家介绍Spring Boot启动流程详解,感兴趣的朋友跟随小编一起看看吧
    2026-02-02
  • 跟我学Java Swing之游戏设计(2)

    跟我学Java Swing之游戏设计(2)

    跟我学Java Swing之游戏设计(2)...
    2006-12-12
  • 使用spring-cache一行代码解决缓存击穿问题

    使用spring-cache一行代码解决缓存击穿问题

    本文主要介绍了使用spring-cache一行代码解决缓存击穿问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Spring Boot开发时Java对象和Json对象之间的转换

    Spring Boot开发时Java对象和Json对象之间的转换

    在Spring Boot开发中,我们经常需要处理Java对象和Json对象之间的转换,本文将介绍如何在Spring Boot项目中实现Java对象和Json对象之间的转换,感兴趣的朋友跟随小编一起看看吧
    2023-09-09

最新评论