欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis中foreach标签中使用pgsql的in语句时,出现空格导致的语法错误的问题。

程序员文章站 2024-01-27 11:47:40
...

1、先看问题,提示的语法错误,在" " 附近,(对于这个提示我也挺懵!);能明显看出mybatis生成的sql之间存在很多空格;
Mybatis中foreach标签中使用pgsql的in语句时,出现空格导致的语法错误的问题。
2、把控制台的sql单独拿出来测试,发现把空格都去掉就没问题了。
Mybatis中foreach标签中使用pgsql的in语句时,出现空格导致的语法错误的问题。
去点后如下图
Mybatis中foreach标签中使用pgsql的in语句时,出现空格导致的语法错误的问题。
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>

如图没再生成空格,也没有错误了
Mybatis中foreach标签中使用pgsql的in语句时,出现空格导致的语法错误的问题。
总结
1、在mybatis的,in条件语句中使用时候,in关键子后面不要加 换行