mybatis批量插入并返回主键至原list
报错
Error getting generated key or setting result to parameter object. UnsupportedOperationException
原因
- mybatis 3.3.1之前的版本不支持批量新增返回主键id的功能;
- mybatis 3.3.1之后一些版本支持了批量插入返回id,但是不支持Dao层批量插入的函数多个参数,@param注解;(也就是不支持分表)
- mybatis 3.5.1之后的版本支持批量插入返回id,多个参数,@param注解
解决方案
- 升级mybatis 3.5.1(并且保证maven依赖的所有mybatis版本都大于3.5.1)
- Dao
void batchInsert(@Param("idx") Integer idx, @Param("list") List<DO> list);
- mapper
<insert id="batchInsert" useGeneratedKeys="true" keyProperty="list.id">
insert into do_${idx} (name, address)
values
<foreach collection="list" item="item" separator=",">
(#{item.name},#{item.address})
</foreach>
</insert>
注:因为函数有多个参数,所以无法确定取的是哪个参数的id,所以需要在keyProperty="list.id",表明是list的。
参考
mybatis 批量插入 返回主键id - 译林 - 博客园
mybatis批量插入数据并返回主键至原list集合_叛逆的鲁鲁修-程序员ITS301_mybatis批量插入返回list - 程序员ITS301