Mybatis中foreach标签中使用pgsql的in语句时,出现空格导致的语法错误的问题。
程序员文章站
2024-01-27 11:47:40
...
1、先看问题,提示的语法错误,在" " 附近,(对于这个提示我也挺懵!);能明显看出mybatis生成的sql之间存在很多空格;
2、把控制台的sql单独拿出来测试,发现把空格都去掉就没问题了。
去点后如下图
3、看一下mapper.xml中的sql,看了好多遍真没发现什么毛病;
select * from sz_zcxx
<where>
<if test="zclbmc != null">
and zclbmc = #{zclbmc}
</if>
<if test="zclbdmArray!=null and zclbdmArray.size() !=0">
and zclbdm in
<foreach collection="zclbdmArray" item="zclbdm" index="i" open="(" separator="," close=")">
#{zclbdm}
</foreach>
</if>
</where>
4、最后大胆尝试,我把in 语句后面的“换行”全部都去掉了,你猜怎么招,好使了;没错这就好使了,mmp。
select * from sz_zcxx
<where>
<if test="zclbmc != null">
and zclbmc = #{zclbmc}
</if>
<if test="zclbdmArray!=null and zclbdmArray.size() !=0">
and zclbdm in <foreach collection="zclbdmArray" item="zclbdm" index="i" open="(" separator="," close=")">#{zclbdm}</foreach>
</if>
</where>
如图没再生成空格,也没有错误了
总结:
1、在mybatis的,in条件语句中使用时候,in关键子后面不要加 换行!