快捷搜索:  as  test

MyBatis 通用mapper批量插入异常

ExecutorException: Error getting generated key or setting result to parameter object.

Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [list]

本日偶遇非常,查了相关文章,大年夜部分辩是由于参数绑定的非常,应用@Param 办理,但我的工程并非如斯。

我的工程情况:SSM+通用mapper

用过通用mapper的都知道,通用mapper支持批量插入insertList ,直接传入一个PO的List即可;但便是在调用insertList 批量插入时抛出的此非常,稀罕的是,根据mybatis debug打印的日志,所有SQL语句都履行成功,履行SQL和参数打印的都没问题。

于是 搜索到这篇文章,指出 去除mybatis-config.xml中的 开启获取自增主键 或设为false

就不会抛出此非常。

改成false后,发明确凿不抛此非常了。然则不巧的是营业措施必要在插入A表后,返回一个主键id,再去插入详情表B,假如设为false,在履行插入详情表B 时就报关联外键不能为null;

出于光阴缘故原由,急速把第一次插入表A的记录按插入前提查出,再得到查询返回工具的ID,设置给插入表B的关联自动,此次再履行,发明照样报出开始的非常:

ExecutorException: Error getting generated key or setting result to parameter object.

Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [list]

后续又考试测验了很多法子,不停办理不了,很多文章都是关于 原生mybatis批量插入时的问题,经由过程改动mapper.xml的insert语句添加xml属性办理。

着末找到了通用mapper作者交流群,被问到自己工程应用的mybatis版本。发明自己工程,别人搭建之初应用的mybatis版本是3.0.6。

缘故原由是:mybatis版本太低,不支持insertList批量插入,

支持通用mapper批量插入 最低必要的版本 3.3.1。着末改动工程依附如下,进级mybatis版本:

org.mybatis

mybatis

3.4.1

org.mybatis

mybatis-spring

1.3.0

tk.mybatis

mapper

4.0.3

进级后,所有运行就正常了。

实际上,mybatis供给了返回插入后的主键ID,只需在mybatis-config.xml设置设置设备摆设摆设开启即可(此要领是全局通用设置)

当然也可以在单个措施上应用

@Options(useGeneratedKeys=true,keyProperty="id")

keyProperty是你POJO实体类与数据库主键映射的那个字段。

您可能还会对下面的文章感兴趣: