foreach标签
在写 MyBatis Mapper XML 时,经常会遇到 集合参数,比如 ID 列表、状态列表。直接拼接 SQL 不仅繁琐,还容易出错,MyBatis 提供了 <foreach> 标签,专门用于 遍历集合生成 SQL。
1. 基本语法
Section titled “1. 基本语法”<foreach collection="集合名" item="单个元素名" open="开头字符" separator="分隔符" close="结尾字符"> #{单个元素名}</foreach>-
collection:集合变量名(通常是 mapper 方法参数或对象属性); -
item:遍历时每个元素的占位符; -
open:输出内容的起始符号,例如(; -
separator:元素之间的分隔符,例如,; -
close:输出内容的结束符号,例如)。
2. 使用示例
Section titled “2. 使用示例”2.1. 动态生成 IN 条件
Section titled “2.1. 动态生成 IN 条件”假设有一个状态列表 distributeStatuses,需要生成 SQL:
<if test="distributeStatuses != null and distributeStatuses.length > 0"> AND fbvh.distribute_status IN <foreach collection="distributeStatuses" item="distributeStatus" open="(" separator="," close=")"> #{distributeStatus} </foreach></if>- 当
distributeStatuses = [1,2,3]时,生成 SQL:
AND fbvh.distribute_status IN (1,2,3)2.2. 遍历列表插入多条数据
Section titled “2.2. 遍历列表插入多条数据”<insert id="batchInsert" parameterType="java.util.List"> INSERT INTO user (id, name) VALUES <foreach collection="list" item="user" separator=","> (#{user.id}, #{user.name}) </foreach></insert>- 可以一次性批量插入多条记录,效率比循环调用单条插入高。