当前位置:   article > 正文

Column count doesn’t match value count at row 1_mybatis column count doesn't match value count at

mybatis column count doesn't match value count at row 1

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

问题就处在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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

如果是类似根据多个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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

最终生成的sql语句为:SELECT * FROM mobile_geo WHERE id IN(?,?,?,?,?,?)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/832382
推荐阅读
相关标签
  

闽ICP备14008679号