赞
踩
MyBatis批量插入数据报错:Column count doesn’t match value count at row 1
意思是列数目跟值数目不匹配。
这样写的:
<insert id="saveMobileGeos">
INSERT INTO mobile_geo(mobile_prefix,province,city,zip_code,area_code,operator) VALUES
<foreach item="item" collection="mobileGeoList" separator="," open="(" close=")" index="">
#{item.mobilePrefix},#{item.province},#{item.city},#{item.zipCode},#{item.areaCode},#{item.operator}
</foreach>
ON duplicate KEY UPDATE mobile_prefix=mobile_prefix
</insert>
问题就处在open="(" close=")"
上,会在list遍历完后,最外层加一对括号,而不是遍历中加括号,这就导致生成的sql语句错误。
应该改成:
<insert id="saveMobileGeos">
INSERT INTO mobile_geo(mobile_prefix,province,city,zip_code,area_code,operator) VALUES
<foreach item="item" collection="mobileGeoList" separator="," index="">
(#{item.mobilePrefix},#{item.province},#{item.city},#{item.zipCode},#{item.areaCode},#{item.operator})
</foreach>
ON duplicate KEY UPDATE mobile_prefix=mobile_prefix
</insert>
如果是类似根据多个id查询这种场景,则可以使用open="(" close=")"
:
<select id="listMobileGeos">
SELECT * FROM mobile_geo WHERE id IN
<foreach item="item" collection="idList" separator="," open="(" close=")" index="">
#{item}
</foreach>
</select>
最终生成的sql语句为:SELECT * FROM mobile_geo WHERE id IN(?,?,?,?,?,?)
。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。