MyBatis批量插入返回主键报错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis批量插入返回主键报错相关的知识,希望对你有一定的参考价值。

参考技术A 报错信息:
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 [collection, list]

解决方法:
升级版本(mybatis-3.5.6,mybatis-spring-2.0.6)

Mybatis批量插入返回自增主键(转)

我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键:


1、对于支持生成自增主键的数据库:useGenerateKeys和keyProperty。

2、不支持生成自增主键的数据库:<selectKey>。


但是怎对批量插入数据返回自增主键的解决方式网上看到的还是比较少,至少百度的结果比较少。


Mybatis官网资料提供如下:


First, if your database supports auto-generated key fields (e.g. MySQL and SQL Server), then you can simply set useGeneratedKeys="true" and set the Authortable above had used an auto-generated column type for the id, the statement would be modified as follows:


1 <insert id="insertAuthor" useGeneratedKeys="true"
2     keyProperty="id">
3   insert into Author (username,password,email,bio)
4   values (#{username},#{password},#{email},#{bio})
5 </insert>
 

If your database also supports multi-row insert, you can pass a list or an array of 

1 <insert id="insertAuthor" useGeneratedKeys="true"
2     keyProperty="id">
3   insert into Author (username, password, email, bio) values
4   <foreach item="item" collection="list" separator=",">
5     (#{item.username}, #{item.password}, #{item.email}, #{item.bio})
6   </foreach>
7 </insert>

 

从官网资料可以看出Mybatis是支持批量插入时返回自增主键的。(百度上说不支持的,多打脸 开玩笑的)


但是在本地测试的时候使用上述方式确实不能返回自增id,而且还报错(不认识keyProperty中指定的Id属性),然后在网上找相关资料。终于在Stackoverflow上面找到了一些信息。


解决办法:

1、升级Mybatis版本到3.3.1。

2、在Dao中不能使用@param注解。

3、Mapper.xml中使用list变量接受Dao中的集合。


参考地址:








以上是关于MyBatis批量插入返回主键报错的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis批量插入返回自增主键(转)

mybatis批量插入,怎么返回生成的自增主键

Mybatis 插入一条或批量插入 返回带有自增长主键记录

spring mybatis 批量插入返回主键

Mybatis之MySql批量insert后返回主键

Mybatis 怎么返回insert插入的主键