当前位置: 首页 > news >正文

mybatis里in关键字拼接id问题

我们一般会把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标签✅


http://www.mrgr.cn/news/96528.html

相关文章:

  • GOF23种设计模式
  • 从Web到桌面:深入解析Electron的技术架构与应用实践
  • RK3588,V4l2 读取Gmsl相机, Rga yuv422转换rgb (dma), 实现零拷贝
  • Docker实现MySQL主从复制配置【简易版】
  • AutoDIR: Automatic All-in-One Image Restoration with Latent Diffusion 论文阅读 ECCV
  • UE5 学习笔记 FPS游戏制作30 显示击杀信息 水平框 UI模板(预制体)
  • .js项目编译成.exe程序(交叉编译全过程整理)
  • Docker使用ubuntu
  • 浅析车规芯片软错误防护加固的重要性
  • 设计模式之适配器模式(二):STL适配器
  • 房贷计算器
  • 验证码通过“Canvas 绘制”与“Base64 图片”渲染两种不同的实现方式显示
  • C++ 继承:面向对象编程的核心概念(二)
  • Dust3r、Mast3r、Fast3r
  • docker-compose部署prometheus+grafana+node_exporter+alertmanager规则+邮件告警
  • 逆向--ARM64汇编
  • QFlightInstruments飞行仪表控件库
  • iptables学习记录
  • 拓展知识六:MetInfo6.0.0目录遍历漏洞原理分析
  • WEB安全--RCE--RCE的危险函数