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=?...
连在一起,执行时断句失败导致报错
替换?
去数据库执行一下,果然是因为没有空格断句失败
总结
<where>
标签内嵌<foreach>
标签时,注意在<foreach>
标签内的拼接条件(LOG_ID=#{item}
)的两侧留空格。