你的位置:首页 > Java教程

[Java教程]记录一次bug解决过程:数据迁移


一 总结

  不擅长语言表达,勤于沟通,多锻炼

  调试MyBatis中SQL语法:foreach 问题;缺少关键字VALUES。很遗憾:它的错误报的让人找不着北。

二 BUG描述:MyBatis中批量插入数据异常

<??><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="com.wacai.datamigration.dao.adanos.ApplicationCorpInfoMapper">  <insert id="insertApplicationCorpInfoBean" parameterType="java.util.List">  INSERT approve_corp_info (    id,    operator,    created_time,    updated_time  )  <foreach item="item" collection="list" separator=",">    (NULL,    #{item.operator},    NOW(),    NOW())  </foreach>   </insert></mapper>

  如上所示,是正确的批量插入数据的写法,这个问题犯错误两次。在传入list,且使用foreach便利来批量插入数据的时候,一定要注意括号的使用,之前出错的代码释放如下:

<??><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="com.wacai.datamigration.dao.adanos.ApplicationCorpInfoMapper">  <insert id="insertApplicationCorpInfoBean" parameterType="java.util.List">  INSERT approve_corp_info (    id,    operator,    created_time,    updated_time  )  <foreach item="item" collection="list" separator="," open="(" close=")">    (NULL,    #{item.operator},    NOW(),    NOW())  </foreach>   </insert></mapper>

  这样的代码,会报错:Column count doesn't match value count at row 1,更多插入动作,可以参考:http://www.cnblogs.com/fsjohnhuang/p/4078659.html

三 BUG描述:MyBatis中SQL语法错误跟踪

  解决方法:将批量动作改为一个插入动作,将SQL打印出来,看代码。查和插都改成一个数据来跟踪错误。