MyBatis批量新增返回主键失效

1. MyBatis版本:

        3.4.6

 2. 批量新增代码:

 int insertBatch(@Param("dataList")List<Object> dataList);

<insert id="insertBatch" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id"> 

        insert into test(name) values

        <foreach collection="dataList" item="item" index="index" separator=",">

        (#{item.name, jdbcType=VARCHAR})

        </foreach>

</insert>                                                                                                                                                                            


3. 返回结果没有id,Jdbc3KeyGenerator部分源码:

判断入参getParameters()

if (parameter instanceof Collection) {

 parameters = (Collection)parameter;

} else if (parameter instanceof Map) {

if (parameterMap.containsKey("collection")) {                                                                                                                                parameters = (Collection)parameterMap.get("collection");                                                                                                 

} else if (parameterMap.containsKey("list")) {                                                                                                                  parameters = (List)parameterMap.get("list");                                                                                                                       

} else if (parameterMap.containsKey("array")) {                                                                                                                              parameters = Arrays.asList((Object[])((Object[])parameterMap.get("array")));                                                                         }                                                                                                                                                                                                 

}

if (parameters == null) {

    parameters = new ArrayList();

      ((Collection)parameters).add(parameter);

 }

由代码可知Mybatis通过指定参数名获取数据,例如:list、array等,当自定义参数名,则强转为集合类型,后续转化会出现异常,导致id为空,部分getTypeHandlers代码

TypeHandler th;

try {

    Class<?> keyPropertyType = metaParam.getSetterType(keyProperties[i]);

} catch (BindingException var9) {

th = null;

}


4. 解决方法

将形参名称修改为list

 int insertBatch(@Param("list")List<Object> dataList); 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • SQL解析 Mybatis在初始化的时候,会读取xml中的SQL,解析后会生成SqlSource对象,SqlSou...
    联旺阅读 2,635评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,120评论 19 139
  • 报错信息:nested exception is org.apache.ibatis.executor.Execu...
    叶小溪阅读 3,514评论 0 0
  • 对象的创建与销毁 Item 1: 使用static工厂方法,而不是构造函数创建对象:仅仅是创建对象的方法,并非Fa...
    孙小磊阅读 6,333评论 0 3
  • mybatis 1.如何批量插入数据 SQL层面 先复习一下单条/批量插入数据的sql语句怎么写: 1. 单条插入...
    vincent519阅读 4,571评论 0 0

友情链接更多精彩内容