FIND_IN_SET()方法

一、基础用法说明

FIND_IN_SET(str, strlist)函数的作用是:在strlist(逗号分隔的字符串)中查找str的位置,返回值是数字(找到则返回位置,从1开始;没找到返回0)。
结合 MyBatis 的#{ids}是为了安全地传入参数,避免 SQL 注入。

二、完整使用示例

1. 场景:根据多个 ID 批量查询数据

假设你有一张user表,想通过多个用户 ID(如 1,3,5)查询对应的用户信息,就可以用这个函数。

(1) MyBatis Mapper XML 写法
<!-- UserMapper.xml --><selectid="selectUserByIds"resultType="com.example.entity.User">SELECT * FROM user WHERE FIND_IN_SET(id, #{ids})</select>
(2) Mapper 接口定义
// UserMapper.javaimportorg.apache.ibatis.annotations.Param;importjava.util.List;importcom.example.entity.User;publicinterfaceUserMapper{// 注意:参数名要和 XML 中的 #{ids} 对应,建议用 @Param 显式指定List<User>selectUserByIds(@Param("ids")Stringids);}
(3) 业务层调用
// UserService.javaimportorg.springframework.stereotype.Service;importjavax.annotation.Resource;importjava.util.List;importcom.example.entity.User;importcom.example.mapper.UserMapper;@ServicepublicclassUserService{@ResourceprivateUserMapperuserMapper;publicList<User>getUserListByIds(){// 传入逗号分隔的 ID 字符串Stringids="1,3,5";// 调用 Mapper 方法returnuserMapper.selectUserByIds(ids);}}
2. 关键注意事项
  • 参数格式#{ids}接收的必须是逗号分隔的字符串(如"1,3,5"),不能是 List 集合直接传入(如果是 List,需要先转成字符串)。
    示例(List 转字符串):
    List<Integer>idList=Arrays.asList(1,3,5);Stringids=String.join(",",idList.stream().map(String::valueOf).toArray(String[]::new));
  • 性能提示FIND_IN_SET()无法使用索引,数据量大时性能较差,建议优先用IN (1,3,5)(MyBatis 中可通过<foreach>实现)。
  • 返回值逻辑
    • FIND_IN_SET(3, '1,3,5')→ 返回 2(第2个位置)
    • FIND_IN_SET(6, '1,3,5')→ 返回 0(未找到)

三、对比:FIND_IN_SET vs IN(推荐写法)

如果你的参数是 List 集合,更推荐用<foreach>拼接IN,性能更好:

<selectid="selectUserByIds"resultType="com.example.entity.User">SELECT * FROM user WHERE id IN<foreachcollection="ids"item="id"open="("separator=","close=")">#{id}</foreach></select>

对应的接口:

List<User>selectUserByIds(@Param("ids")List<Integer>ids);

总结

  1. FIND_IN_SET(id, #{ids})中,#{ids}必须传入逗号分隔的字符串,函数返回匹配的位置(非0则命中);
  2. 该写法无法使用索引,数据量大时优先用 MyBatis 的<foreach>拼接IN
  3. 使用时注意参数类型:直接传 List 会报错,需转成字符串(或改用IN写法)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1196801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026年,测试报告将由AI自动生成,你只需做决策

1.1 智能生成引擎的底层逻辑 动态日志分析&#xff1a;基于Transformer的日志语义理解模型&#xff08;如LogBERT&#xff09;实时解析测试过程数据 缺陷预测矩阵&#xff1a;集成历史缺陷库与代码变更特征训练的风险概率模型&#xff08;示例见下表&#xff09; 多模态呈现&…

硬核科普:从“教室点名”看懂 ARP 协议的全过程

作者&#xff1a;飞哥&#xff08;一个喜欢讲故事的全栈开发者&#xff0c;擅长把复杂的代码翻译成“人话”&#xff09; 关键词&#xff1a;ARP欺骗, ARP代理, 免费ARP ,ARP协议, 计算机网络, 网络安全1. 什么是 ARP&#xff1f; ARP (Address Resolution Protocol)&#xff…

负面提示词怎么写?Qwen-Image-2512-ComfyUI避雷经验

负面提示词怎么写&#xff1f;Qwen-Image-2512-ComfyUI避雷经验 1. 为什么负面提示词在Qwen-Image-2512中如此关键&#xff1f; 很多人用Qwen-Image-2512生成图片时&#xff0c;第一反应是&#xff1a;“这模型真强&#xff0c;细节太真实了&#xff01;”确实&#xff0c;它…

导师严选9个AI论文网站,专科生搞定毕业论文+格式规范!

导师严选9个AI论文网站&#xff0c;专科生搞定毕业论文格式规范&#xff01; AI 工具助力论文写作&#xff0c;专科生也能轻松应对 对于很多专科生来说&#xff0c;撰写毕业论文不仅是一项学术任务&#xff0c;更是一次心理和时间上的双重挑战。尤其是在面对格式规范、内容逻…

springboot_ssm836风俗文化管理系统--论文

目录 具体实现截图摘要 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 摘要 随着信息技术的快速发展&#xff0c;传统风俗文化的保护与传承面临新的机遇与挑战。为提升文化管理的效率与规范性…

springboot_ssm849的网上报名系统SSM

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 摘要 网上报名系统基于SpringBootSSM框架开发&#xff0c;整合了Spring、SpringMVC和MyBatis技术&#xff0c;实现高效、稳…

springboot_ssm837高校学生健康档案管理系统--论文

目录 具体实现截图摘要 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 摘要 随着高校学生规模的不断扩大&#xff0c;健康档案管理已成为高校管理工作中的重要环节。传统纸质档案管理方式存在…

没有数据标注,AI测试怎么跑?2026年的新解决方案

无标注数据时代的AI测试挑战 在AI驱动的软件测试领域&#xff0c;标注数据匮乏是长期痛点——如同警察缺乏罪犯画像&#xff0c;无法精准识别缺陷。2026年&#xff0c;随着大模型和自动化工具演进&#xff0c;传统依赖标注的测试方法已显不足。本文针对软件测试从业者&#xf…

springboot_ssm844农产品商城 农场供销一体系统SSM

目录 具体实现截图系统概述核心功能技术架构创新点应用价值 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 系统概述 SpringBoot_SSM844农产品商城是一个基于SpringBootSSM&#xff08;Spring…

基于微信小程序的实验室排课系统【源码+文档+调试】

&#x1f525;&#x1f525;作者&#xff1a; 米罗老师 &#x1f525;&#x1f525;个人简介&#xff1a;混迹java圈十余年&#xff0c;精通Java、小程序、数据库等。 &#x1f525;&#x1f525;各类成品Java毕设 。javaweb&#xff0c;ssm&#xff0c;springboot等项目&#…

GPEN人像修复实战:一张模糊照如何重生

GPEN人像修复实战&#xff1a;一张模糊照如何重生 你有没有见过那种老照片&#xff1f;泛黄、模糊、布满噪点&#xff0c;人脸几乎看不清轮廓。可就在这样的图像上&#xff0c;AI 正在做一件近乎“逆天改命”的事——把一张几十年前的模糊人像&#xff0c;还原成高清清晰的模样…

Java毕设选题推荐:基于springboot的医药配药管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

springboot_ssm845股票基金分析系统的设计与实现ssm

目录 具体实现截图摘要内容 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 摘要内容 基于SpringBoot和SSM框架的股票基金分析系统旨在为投资者提供高效、便捷的数据分析与决策支持工具。系统整…

springboot_ssm838学生过程性作业评价系统ssm

目录具体实现截图系统概述技术架构核心功能应用价值系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 系统概述 SpringBoot_SSM838学生过程性作业评价系统基于SpringBootSSM&#xff08;SpringSpr…

基于微信小程序的环保餐具销售系统【源码+文档+调试】

&#x1f525;&#x1f525;作者&#xff1a; 米罗老师 &#x1f525;&#x1f525;个人简介&#xff1a;混迹java圈十余年&#xff0c;精通Java、小程序、数据库等。 &#x1f525;&#x1f525;各类成品Java毕设 。javaweb&#xff0c;ssm&#xff0c;springboot等项目&#…

springboot_ssm839学校招生系统ssm

目录具体实现截图学校招生系统SSM框架摘要核心功能模块技术实现特点扩展性与安全性系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 学校招生系统SSM框架摘要 基于SpringBoot和SSM&#xff08;Sp…

【课程设计/毕业设计】基于java+springboot+vue+mysql的房产交易租赁服务平台基于springboot的房产交易服务平台的设计与实现【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

用AI写测试用例?这5个提示词模板让你效率翻倍

一、AI重构测试生产力&#xff1a;从耗时手工到精准自动化 在持续交付成为行业标配的今天&#xff0c;测试工程师面临用例设计耗时与覆盖率不足的双重压力。传统手工编写用例模式下&#xff0c;一个中级工程师完成核心功能测试需30-40分钟&#xff0c;而AI辅助可将此过程压缩至…

springboot_ssm846农产品特产品网络交易平台设计与实现ssm

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 摘要 该农产品特产品网络交易平台基于SpringBoot和SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架开发&#xff0…

微信小程序生命周期

在微信小程序开发中&#xff0c;生命周期是贯穿全局的核心逻辑&#xff0c;决定了代码在不同阶段的执行时机。无论是初始化全局数据、请求接口、操作DOM&#xff0c;还是释放资源&#xff0c;都需要依赖生命周期钩子函数精准控制。 小程序生命周期分为两大维度&#xff1a;应用…