记录一次bug解决过程:数据迁移

时间:2022-04-15 22:32:20

一 总结

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

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

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

<?xml version="1.0" encoding="UTF-8" ?>
<!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便利来批量插入数据的时候,一定要注意括号的使用,之前出错的代码释放如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!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打印出来,看代码。查和插都改成一个数据来跟踪错误。

四