Mybatis中foreach的使用

发布时间 2023-09-13 10:36:14作者: 種瓜得豆

foreach一共有List,array,Map三种类型的使用场景。

foreach的主要用在构建in条件中,它可以在sql语句中进行迭代一个集合。

  • collection:表示迭代集合的名称,可以使用@Param注解指定(必选参数)
  • item:表示集合中每一个元素进行迭代时的别名,若collection为List、Set或者数组,则表示其中的元素;若collection为map,则代表key-value的value(必选参数)
  • index:指定一个名字,用于表示在迭代过程中,每次迭代到的位置,在list、Set和数组中,index表示当前迭代的位置,在map中,index代指是元素的key(可选参数)
  • open:表示该语句以什么开始,mybatis会将该字符拼接到整体的sql语句之前,并且只拼接一次(可选参数)
  • separator:表示在每次进行迭代之间以什么符号作为分隔符(可选参数)
  • close:表示以什么结束,mybatis会将该字符拼接到整体的sql语句之后(可选参数)

参数list类型插入:

<insert id="insertUser" parameterType="java.util.List">
    insert into user
    (user_id,user_name)
    values
    <foreach collection="addList" item="item" index="index" separator="," open="(" close=")" >
    #{item.userId,jdbcType=VARCHAR},#{item.userName,jdbcType=VARCHAR}
    </foreach>
</insert>
insert into user (user_id,user_name) values (userId,userName),(userId,userName),(userId,userName);

参数List类型查询:

<select id="getList" parameterType="java.util.List" resultType="User">
    select * from t_user where id in
    <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
        #{item}
    </foreach>
</select>

参数Array类型查询:

<select id="getList" parameterType="java.util.ArrayList" resultType="User">
     select * from t_user where id in
     <foreach collection="array" item="item" index="index" open="(" separator="," close=")">
          #{item}
     </foreach>
</select> 

参数Map类型查询:

<select id="getList" parameterType="java.util.HashMap" resultType="User">
    select * from t_user where id in
    <foreach collection="map" item="value" index="key" open="(" separator="," close=")">
        #{value}
    </foreach>
</select>