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. 返回結(jié)果沒有id味抖,Jdbc3KeyGenerator部分源碼:
判斷入?yún)etParameters()
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通過指定參數(shù)名獲取數(shù)據(jù)孟辑,例如:list、array等尊惰,當自定義參數(shù)名柬姚,則強轉(zhuǎn)為集合類型襟交,后續(xù)轉(zhuǎn)化會出現(xiàn)異常,導致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);?