问题如下:
<select id="getUser" parameterType="hashmap" resultType="hashmap">
SELECT
<include refid="primary" /> ,
<include refid="exPrimary" />
FROM <include refid="tableName" />
<where>
<if test="id != null"><include refid="primary" /> = #{id}</if>
<if test="ids != null">
AND id in
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</where>
</select>
后台打印SQL语句:
SELECT
*
FROM
USER
WHERE
id IN (10, 11, 12)
AND id = 12
修改后代码:
<select id="getUser" parameterType="hashmap" resultType="hashmap">
SELECT
<include refid="primary" /> ,
<include refid="exPrimary" />
FROM <include refid="tableName" />
<where>
<if test="id != null"><include refid="primary" /> = #{id}</if>
<if test="ids != null">
AND id in
<foreach collection="ids" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</where>
</select>
修改后后台打印SQL语句:
SELECT
*
FROM
USER
WHERE
id IN (10, 11, 12)
foreach 遍历集合的时候,元素名称不能和其他参数名称一样,否则会出现问题
本文详细解析了 MyBatis 中 foreach 的正确使用方式,尤其关注在 SQL 语句中如何避免因变量名重复导致的问题。通过具体示例说明了如何修正 SQL 语句生成逻辑,并展示了修改前后的 SQL 输出差异。
3632

被折叠的 条评论
为什么被折叠?



