当前位置: 首页 > 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.dtcms.com/a/103310.html

相关文章:

  • Java 时间处理:轻松掌握 java.time 包
  • 05-031-自考数据结构(20331)- 哈希表 - 例题分析
  • UE5学习记录part12
  • WebForms 事件
  • stm32第十天外部中断和NVIC讲解
  • 力扣刷题——排序链表
  • Lua语言脚本环境配置
  • 【uboot1】启动流程,环境变量,实例
  • Ubuntu上给AndroidStudio创建桌面图标
  • API 安全之认证鉴权
  • C++的指针数组、数组指针和指针数组指针
  • 怎么安装JSON服务器?JSON服务器最新安装教程
  • JavaScript中的模块化
  • GitHub Flow与GitLab Flow的详细
  • python求解常微分方程之Galerkin method:权函数
  • 【日期问题(判断星期几)】
  • 有哪些好用的项目管理工具推荐?并且支持AI定制和私有部署的?
  • 简单程序语言理论与编译技术·19 实现一个解释器
  • HTTP新的二进制格式与多路复用
  • 股指期货四个品种合约是什么意思?
  • OpenCV基础——图像滤波和形态学操作
  • 数字化计算机语言特性对比
  • 力扣HOT100之矩阵:48. 旋转图像
  • 《JVM考古现场(十四):混沌重启——从量子永生到宇宙热寂的终极编译》
  • 「Unity3D」TMP_InputField关闭虚拟键盘后,再次打开虚拟键盘,此时无法回调onSelect的问题
  • 文章配图新纪元:OpenAI新推出的GPT-4o原生图像生成功能启示
  • Joint Receiver Design for Integrated Sensing and Communications
  • 双向链表的理解
  • 【Kettle安装】Kettle安装过程, 电脑已安装java23,安装Kettle 出现报错:尝试启动 Java 虚拟机(JVM)时失败解决方法
  • JavaEE-MyBatis概述第一个程序