Mybatis动态sql中foreach需要注意的地方

异常:mybatis Column count doesn't match value count at row 1

针对这个异常,有许多情况,报错主要说mybatis动态sql前后参数不匹配

什么意思呢:就是这种    insert into user(name,id)  values (name);

动态sql解析后后面传入的参数与前面不一致。

这个异常出现的情况很多不只这一种,不过都是sql转化后不是正常的sql语句,自己转化后就看出来了


这里举例一种报错


    INSERT INTO 
		user
	(class, student)
    VALUES
    
  	 #{class,jdbcType=VARCHAR}, #{student,jdbcType=VARCHAR}
    
  

这里open="(" close=")"   是给sql语句加上( )的意思

解析后语句为 insert into user (class,student) values (class,student class,student class,student......)

所以造成了动态sql前后匹配不一致

需要改为

 
    INSERT INTO 
		user
	(class, student)
    VALUES
    
  	(#{class,jdbcType=VARCHAR}, #{student,jdbcType=VARCHAR})
    
  
把open="(" close=")"去掉    在循环内直接加上( ),

这时候语句就变成了insert into user (class,student) values (class,student)(class,student)(class,student)(......)

这次就符合正常sql语句了

对于动态sql报错一般都是解析动态sql后语法不对,所以直接按动态sql意思转化为sql语句就能看出错误。

你可能感兴趣的:(mybatis)