当前位置: 首页> 娱乐> 明星 > mybatis批量插入时提示Parameter id not found问题

mybatis批量插入时提示Parameter id not found问题

时间:2025/7/11 8:37:37来源:https://blog.csdn.net/leftfist/article/details/140361941 浏览次数:0次

这个问题我已经遇过好几次了。总是不记得,每次都要折腾搜索一轮,有必要记录一下。

一、现象描述

我在spring boot项目中,使用mybatis进行批量插入,结果有错误提示。不过很奇怪,好像并不影响实际执行。数据也插到数据库里面去了。但这种提示一大堆,满屏都是,看着心好烦。提示如下:

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 [entities, param1]at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:77) ~[mybatis-spring-1.3.1.jar!/:1.3.1]at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446) ~[mybatis-spring-1.3.1.jar!/:1.3.1]at com.sun.proxy.$Proxy84.insert(Unknown Source) ~[na:na]at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:278) ~[mybatis-spring-1.3.1.jar!/:1.3.1]at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:57) ~[mybatis-3.4.4.jar!/:3.4.4]at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59) ~[mybatis-3.4.4.jar!/:3.4.4]at com.sun.proxy.$Proxy115.insertBatch(Unknown Source) ~[na:na]。。。

二、解决问题

后来根据残存的记忆片段,找到一些答案,又改了一轮。记录如下:

1、修改dao或mapper.java

    //int insertBatch(@Param("entities") List<PowerData> entities);//原方法int insertBatch(List<PowerData> entities);

2、修改mapper.xml

将里面的collection="entities" 改成 collection="list"

原代码:

    <insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">insert into power_data(POWER_ID, V, A, TEMP, CREATE_DATE)values<foreach collection="entities" item="entity" separator=",">(#{entity.powerId}, #{entity.v}, #{entity.a}, #{entity.temp}, #{entity.createDate})</foreach></insert>

新代码:

    <insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">insert into power_data(POWER_ID, V, A, TEMP, CREATE_DATE)values<foreach collection="list" item="entity" separator=",">(#{entity.powerId}, #{entity.v}, #{entity.a}, #{entity.temp}, #{entity.createDate})</foreach></insert>

三、小结

为什么要这样改?不知道。原先的代码看,好像找不出什么毛病。因为在dao里,已经通过@Param(“entities”)指明了参数的名称,按道理mybatis应该可以识别,但偏偏不。为什么改成list又可以?难道只是因为该参数的数据类型是List<>?

搞不懂。也许是个bug。更可能是我的mybatis版本低了。

<mysql.version>8.0.11</mysql.version>
<mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
<mybatis-plus.version>3.1.1</mybatis-plus.version>

参考资料
MyBatis insert后返回自增主键,报错org.apache.ibatis.binding.BindingException: Parameter ‘id’ not found

mybatis批量插入,返回主键ID不成功,巨坑

关键字:mybatis批量插入时提示Parameter id not found问题

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: