日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Column count doesn’t match value count at row 1

作者:她丶如月中來 更新時間: 2022-07-18 編程語言

項目場景:

今天使用Mybatis進行數據批量插入,因為公司使用的是Spring自帶的JPA,所以很久沒有使用Mybatis了,在進行批量數據插入的時候報了 Column count doesn't match value count at row 1


dao代碼如下:

/**
 * @Author: Greyfus
 * @Create: 2022-05-30 11:11
 * @Version:
 * @Description:
 */
package com.seeker.mapper;

import com.seeker.pojo.ActionPlanDomain;
import com.seeker.pojo.BaseInfo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface BaseInfoMapper {
    @Select("SELECT * FROM rtm_baseinfo where vehicleType = 1 AND brandCode = #{brandCode} AND roleType = #{roleType} AND type = #{type}")
    List<BaseInfo> findBaseInfoByParameters(@Param(value = "brandCode") String brandCode, @Param(value = "roleType") String roleType, @Param("type") String type);
    //批量插入數據
    int insertActionPlan(@Param("actionPlanDomains") List<ActionPlanDomain> actionPlanDomains);
}

BaseInfoMapper.xml配置:

<?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.seeker.mapper.BaseInfoMapper">
    <insert id="insertActionPlan" parameterType="java.util.List">
        INSERT INTO
        `action_plan`(`created_time`,`updated_time`,`brand_code`,`tenant_code`,`model_code`,`model_year`,`gvid`,`case_overview`,`guide`,`type`,`level`,`role_type`)
        VALUES
        <foreach collection="actionPlanDomains" item="actionPlan"   open="("  close=")" separator=",">
            #{actionPlan.createdTime},#{actionPlan.updatedTime},#{actionPlan.brandCode},#{actionPlan.tenantCode},#{actionPlan.modelCode},#{actionPlan.modelYear},#{actionPlan.gvid},#{actionPlan.caseOverView},#{actionPlan.guide},#{actionPlan.type},#{actionPlan.level},#{actionPlan.roleType}
        </foreach>
    </insert>
</mapper>

首先我檢查了字段個數和參數個數是否匹配,發現是匹配的,此時我在想在參數匹配的情況下為什么還報了Column count doesn't match value count at row 1這個錯誤,我的foreach的open屬性和close屬性也沒有寫錯。

原因分析:


通過報錯信息我發現foreach的open屬性和close屬性是放在整個執行語句的開始和結尾。
在這里插入圖片描述
SQL的批量查詢的語句格式應該是:

INSET INTO TABLE_NAME(column1,column2,column3,column4) 
VALUES 
(value1,value2,value3,value4),
(value1,value2,value3,value4),
(value1,value2,value3,value4),
(value1,value2,value3,value4)

然后使用Mybatis的foreach生成的格式卻是:

INSET INTO TABLE_NAME(column1,column2,column3,column4) 
VALUES 
(
value1,value2,value3,value4,
value1,value2,value3,value4,
value1,value2,value3,value4,
value1,value2,value3,value4
)

Mybatis的foreach是在整個循環語句的開頭和結尾增加(),而并不是每個分隔符后加。

解決方案:

去掉forach中的open和close屬性,然后在語句中加入(

<?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.seeker.mapper.BaseInfoMapper">
    <insert id="insertActionPlan" parameterType="java.util.List">
        INSERT INTO
        `action_plan`(`created_time`,`updated_time`,`brand_code`,`tenant_code`,`model_code`,`model_year`,`gvid`,`case_overview`,`guide`,`type`,`level`,`role_type`)
        VALUES
        <foreach collection="actionPlanDomains" item="actionPlan"   separator=",">
            (#{actionPlan.createdTime},#{actionPlan.updatedTime},#{actionPlan.brandCode},#{actionPlan.tenantCode},#{actionPlan.modelCode},#{actionPlan.modelYear},#{actionPlan.gvid},#{actionPlan.caseOverView},#{actionPlan.guide},#{actionPlan.type},#{actionPlan.level},#{actionPlan.roleType})
        </foreach>
    </insert>
</mapper>

原文鏈接:https://blog.csdn.net/qq_43600166/article/details/125055361

欄目分類
最近更新