MyBatis where标签内嵌foreach标签查询报错‘缺失右括号‘或‘命令未正确结束‘

MyBatis <where>标签内嵌<foreach>标签查询报错’缺失右括号’或’命令未正确结束’

<where>标签内嵌<foreach>标签

截取一段脱敏xml,写明大概意思

<select id="queryLogByIds" resultMap="BaseResultMap">
    SELECT * FROM BP_LOG
    <where>
        <if test="ids != null and ids.size() > 0">
            <!--在<where>标签内 注意在LOG_ID=#{item}两侧留空格 否则会报'缺失右括号'(<foreach>被括号包围的情况下)或'命令未正确结束'-->
            (<foreach collection="ids" item="item" separator="or"> LOG_ID=#{item} </foreach> )
        </if>
    </where>
    ORDER BY LOG_ID
</select>

报错:缺失右括号

打印sql如下

SELECT * FROM BP_LOG WHERE (LOG_ID=?orLOG_ID=?orLOG_ID=? ) ORDER BY LOG_ID

看sql是有右括号的,猜测是 LOG_ID=?orLOG_ID=?...连在一起,执行时断句失败导致报错

替换?去数据库执行一下,果然是因为没有空格断句失败

image-20240712173736852

总结

<where>标签内嵌<foreach>标签时,注意在<foreach>标签内的拼接条件(LOG_ID=#{item})的两侧留空格。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值