网站建设师特点,济南网站开发哪家好,新手网站建设教程图书,织梦建站教程视频在 MyBatis 中#xff0c;foreach 标签用于遍历集合#xff08;Collection、List、Array、Map#xff09;#xff0c;常用于构建动态 SQL 语句#xff08;如 IN 查询、批量插入等#xff09;。以下是详细用法和示例#xff1a; 核心属性
属性描述collection必填…在 MyBatis 中foreach 标签用于遍历集合Collection、List、Array、Map常用于构建动态 SQL 语句如 IN 查询、批量插入等。以下是详细用法和示例 核心属性
属性描述collection必填传入的集合参数名或默认别名 list/arrayitem必填遍历时元素的别名index遍历的索引List/Array 时为序号Map 时为 keyopen循环开始时的字符串如 (close循环结束时的字符串如 )separator元素间的分隔符如 , 一、遍历 List/Array 的 4 种场景
1. 直接传入 List默认别名 list
xml
复制
下载
运行
select idselectByIds resultTypeUserSELECT * FROM userWHERE id INforeach collectionlist itemid open( separator, close)#{id}/foreach
/select
java
复制
下载
ListUser selectByIds(ListLong ids); // 调用时传入 List
2. 使用 Param 指定集合名
xml
复制
下载
运行
foreach collectionids itemid ... !-- 使用自定义名称 --
java
复制
下载
ListUser selectByIds(Param(ids) ListLong ids); // 指定参数名为 ids
3. 遍历 Array默认别名 array
xml
复制
下载
运行
foreach collectionarray itemitem ...
java
复制
下载
ListUser selectByIdArray(Long[] idArray);
4. 遍历对象中的集合属性
java
复制
下载
public class QueryDTO {private ListLong userIds;// getter/setter
}
xml
复制
下载
运行
foreach collectionuserIds itemid ... !-- 直接使用属性名 --
java
复制
下载
ListUser selectByDTO(QueryDTO dto); 二、遍历 Map 示例
xml
复制
下载
运行
insert idinsertUsersINSERT INTO user (name, age) VALUESforeach collectionmap itemvalue indexkey separator,(#{key}, #{value}) !-- key用户名, value年龄 --/foreach
/insert
java
复制
下载
void insertUsers(Param(map) MapString, Integer userMap); // key:name, value:age 三、批量插入常用
xml
复制
下载
运行
insert idbatchInsertINSERT INTO user (name, email) VALUESforeach collectionusers itemuser separator,(#{user.name}, #{user.email})/foreach
/insert
java
复制
下载
int batchInsert(Param(users) ListUser users); ⚠️ 注意事项 集合为 null 时的处理 若传入的集合为 nullforeach 会报错。建议在 Java 代码中做空集合检查。 性能优化 批量操作时避免单次拼接过多 SQL如超过 1000 条。可分批执行 java 复制 下载 for (int i 0; i users.size(); i 200) {mapper.batchInsert(users.subList(i, Math.min(i 200, users.size())));
} 数据库方言差异 部分数据库如 Oracle批量插入语法不同需调整 SQL 结构 xml 复制 下载 运行 !-- Oracle 批量插入示例 --
INSERT ALL
foreach collectionusers itemuserINTO user (name, email) VALUES (#{user.name}, #{user.email})
/foreach
SELECT 1 FROM DUAL 完整示例动态更新多个字段
xml
复制
下载
运行
update idupdateUserUPDATE usersetforeach collectionupdateMap itemvalue indexkey separator,if testvalue ! null${key} #{value} !-- 注意字段名用 ${} 防注入需确保安全 --/if/foreach/setWHERE id #{userId}
/update
java
复制
下载
void updateUser(Param(userId) Long id,Param(updateMap) MapString, Object fields // key字段名, value新值
);
通过灵活使用 foreach可以高效处理集合型参数简化动态 SQL 的编写。