您的位置:首页 > 财经 > 金融 > 域名跳转_宣传册制作软件app_汕头网站推广排名_营销渠道管理

域名跳转_宣传册制作软件app_汕头网站推广排名_营销渠道管理

2025/4/3 3:02:20 来源:https://blog.csdn.net/Suk__/article/details/146564639  浏览:    关键词:域名跳转_宣传册制作软件app_汕头网站推广排名_营销渠道管理
域名跳转_宣传册制作软件app_汕头网站推广排名_营销渠道管理

我们一般会把ids集合用StrUtil.join(‘,’)转成"1,2,3"这种形式 然后放入in中 我们会这么写:

select id, nick_name, icon from tb_user where id in (#{ids}) order by FIELD(id, #{ids})

结果发现sql执行是这样的:

select id, nick_name, icon from tb_user where id in ('1011, 1022') order by FIELD(id, '1011, 1022')

先上正确玩法✅:

<select id="findByIds" resultType="com.hmdp.dto.UserDTO">select id, nick_name, icon from tb_user where id in<foreach collection="ids" open="(" close=")" separator="," item="id">#{id}</foreach>order by FIELD(id,<foreach collection="ids" separator="," item="id">#{id}</foreach>)
</select>

现在说一下为什么会造成这种现象, 原因是mybatis为了防止sql注入而对字符串拼接的片段会在首尾两端添加一对引号 这样就不存在and 1=1永真了 即’1011, 1012’的来源 所以在xml里写sql遍历集合还是要用foreach标签✅

版权声明:

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

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