sql语法 MyBatis <foreach> 标签详解

是 MyBatis 中用于遍历集合/数组的动态 SQL 标签,常用于 IN 查询、批量插入等场景。

java 复制代码
<foreach collection="array" item="item" open="(" separator="," close=")">
    #{item}
</foreach>
属性 说明 示例值
collection 要遍历的集合/数组的名称 "array""list""coll"
item 循环中每个元素的变量名 "item""id"
open 遍历结果前添加的字符 "("
separator 元素之间的分隔符 ","
close 遍历结果后添加的字符 ")"

生成的 SQL 示例

假设传入的数组是 1, 2, 3

sql 复制代码
(1, 2, 3)

完整用法

sql 复制代码
SELECT * FROM user WHERE id IN
<foreach collection="array" item="id" open="(" separator="," close=")">
    #{id}
</foreach>
sql 复制代码
SELECT * FROM user WHERE id IN (1, 2, 3)

collection

collection 的值取决于传入参数的类型:

单个数组参数

sql 复制代码
List<User> selectByIds(Integer[] ids);
sql 复制代码
<foreach collection="array" item="id">...</foreach>

单个 List 参数

sql 复制代码
List<User> selectByIds(List<Integer> ids);
sql 复制代码
<foreach collection="list" item="id">...</foreach>

使用 @Param 注解命名

sql 复制代码
List<User> selectByIds(@Param("idList") List<Integer> ids);
sql 复制代码
<foreach collection="idList" item="id">...</foreach>
情况 collection 怎么写
单个 List 参数,无 @Param "list"
单个数组参数,无 @Param "array"
@Param("xxx") "xxx"(必须和注解里的名字一致)

如果传入的是一个对象(非集合)

sql 复制代码
public class SearchCondition {
    private List<Long> ids;
    private String name;
    // getter/setter
}
sql 复制代码
List<User> selectByCondition(@Param("condition") SearchCondition condition);
sql 复制代码
<!-- 遍历对象内部的集合属性,用 "对象名.属性名" -->
SELECT * FROM user WHERE id IN
<foreach collection="condition.ids" item="id" open="(" separator="," close=")">
    #{id}
</foreach>

对象内部包含集合属性, 这个属性一定要是集合(List,Array) 其他的不能使用foreach

传入参数类型 collection 怎么写 能否用 <foreach>
List "list"@Param 指定的名字 ✅ 可以
数组 "array"@Param 指定的名字 ✅ 可以
对象(含集合属性) "对象名.集合属性名" ✅ 可以(遍历内部集合)
普通对象(无集合属性) --- ❌ 不能用,直接 #{对象.属性}
相关推荐
Mr.亮先生9 小时前
# 把 DeepSeek 官方 Agent 工作台,直接装进 Windows 启动器里
windows·deepseek·harness
小白说大模型12 小时前
LLM集成数据库的幻觉治理:当AI给出的SQL建议是错的
数据库·人工智能·sql·oracle·重构·开源
Csvn13 小时前
📊 SQL 入门 Day 19:事务与隔离级别
后端·sql
曹牧14 小时前
C#:List<string>特定格式输出
windows·c#
今天AI了吗15 小时前
深度学习基础-Harness:从评估框架到工程落地
数据库·人工智能·sql·深度学习·机器学习
码农颜15 小时前
6.1.2 常⽤⽅法的问题
数据库·sql·oracle
易点云徐源16 小时前
(已解决)Photoshop 多画板 Alt+拖动复制随机卡死 4~5 分钟
windows·photoshop
Dovis(誓平步青云)16 小时前
DevEco Studio 6.1.1 Windows 安装实录:从下载校验到首次启动
android·开发语言·数据库·人工智能·windows·harmonyos
bosins16 小时前
将 Hyper-V 上的 Ubuntu 虚拟机内容迁移到 WSL (Windows Subsystem for Linux) 中
linux·windows·ubuntu
TJHHH.17 小时前
SQL注入学习总结
数据库·笔记·sql·学习·注入