MyBatis批量新增返回主键失效

1. MyBatis版本:

        3.4.6

 2. 批量新增代码:

 int insertBatch(@Param("dataList")List dataList);

 

        insert into test(name) values

        

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

       

                                                                                                                                                                            


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 dataList); 

你可能感兴趣的:(MyBatis批量新增返回主键失效)