您的位置:首页 > 汽车 > 时评 > MyBatis where标签内嵌foreach标签查询报错‘缺失右括号‘或‘命令未正确结束‘

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

2024/9/8 7:24:33 来源:https://blog.csdn.net/weixin_45883310/article/details/140425714  浏览:    关键词: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})的两侧留空格。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com