在写mybatis配置文件的时候发现了一个问题,如下代码:
<select id="findById" parameterType="map" resultMap="SmicroProjectMap">
SELECT
<include refid="cols_all"/>
FROM
<include refid="tb"/>
WHERE id = #{projectId}
<if test="ids.size() > 0 ">
AND company_id IN
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
</select>
如果将上面传递的参数Map中的projectId换成id,则会导致生成sql语句时,mybatis无法判定这个id是map中单独传入的还是从map的另一个参数ids中遍历出来的item项,开始没有意识到,都写成id之后,导致最终的参数传入的都是遍历出来的,导致结果有误。
现在唯一的解决办法就是要么把和ids层级相同的参数名改成别的,要么酒吧foreach中的item改成别的,只要不相同即可。