網站首頁 編程語言 正文
項目場景:
今天使用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-08-16 Kotlin空安全空類型淺談_Android
- 2023-07-06 mybatis-plus 3.5.x Cannot resolve method ‘setUseDe
- 2022-08-14 Oracle?system/用戶被鎖定的解決方法_oracle
- 2024-02-28 UNI-APP設置屏幕保持常亮
- 2022-11-09 Go語言數據結構之二叉樹可視化詳解_Golang
- 2022-09-04 ffmpeg網頁視頻流m3u8?ts實現視頻下載_相關技巧
- 2024-04-06 npm install安裝插件很慢,解決方法
- 2022-09-01 Android使用Intent傳遞組件大數據_Android
- 最近更新
-
- 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同步修改后的遠程分支