網站首頁 編程語言 正文
項目場景:
今天使用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
- 上一篇:SpringMVC文件上傳功能實現
- 下一篇:BeanUtils工具類
相關推薦
- 2022-03-15 C#實現時間戳與標準時間的互轉_C#教程
- 2022-11-05 Nginx配置文件nginx.conf的基本配置實例詳解_nginx
- 2023-02-12 C++?STL之string的模擬實現實例代碼_C 語言
- 2022-11-04 python使用tqdm模塊處理文件閱讀進度條顯示_python
- 2022-12-14 深入了解Rust中trait的使用_Rust語言
- 2022-06-23 SQL?Server忘記sa賬號密碼重新添加新管理賬號_MsSql
- 2022-05-20 使用nginx+tomcat+keepalived實現高可用的詳細步驟_nginx
- 2022-04-11 一文帶你了解什么是瀏覽器緩存,DNS,CDN及域名解析類型_網站運營
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支