- collection:必填,值为要迭代循环的属性名。这个属性值的情况有很多
  - item :变量名,值为从迭代对象中取出来的每一个值
  - index: 索引的属性名,在集合数组情况下值为当前索引值,当迭代循环的对象时Map类型时,这个值为map的key值
  - open: 整个循环内容开头的字符串
  - close:整个循环内容结尾的字符串
  - separator: 每次循环的分隔符
  - 只有一个数组参数或集合参数
    - 当参数类型为集合的时候,默认会转换为map类型,并添加一个key为collection的值
    - 如果参数类型是List集合,那么就继续添加一个key为list的值
    - 当参数类型为数组的时候,也会转成map类型,默认的key为array
  - 有多个参数
    - 当有多个参数的时候,要使用@Param注解给每个参数指定一个名字,否则在SQL中使用参数时就会不方便。因此将collection设置为@Param注解指定的名字
  - 参数时Map类型
    - 使用Map和使用@Param注解方式类似,将collection指定为对应Map中的key即可
    - 如果要循环所传入的Map,推荐使用@Param注解指定名字,此时可将collection设置为指定的名字
    - 如果不想指定名字,就使用默认值_parameter
void saveUserRole(@Param("userSn") Long userSn, @Param("list") List<Long> list);
<insert id="saveUserRole">
        insert into tb_user_role
        (user_sn,role_sn)
        values
        <foreach collection="list" item="item" index="index" separator=",">
            (#{userSn},#{item})
        </foreach>
</insert>
<insert id="insertList" useGeneratedKeys="true" keyProperty="id">
  insert into sys_user
  (user_name,user_password,user_email,user_info,head_img,create_time)
  values
  <foreach collection="list" item="user" separator=",">
   #{user.userName},#{user.userPassword},#{user.userEmail},
   #{user.userInfo},#{user.headImg,jdbcType=BLOB},
   #{user.createTime,jdbcType=TIMESTAMP}
  </foreach>
</insert>
 <select id="selectByIdList" resultMap="userMap">
  select
  <include refid="userSql" />
  from sys_user
  <where>
   id in
   <foreach collection="list" open="(" close=")" separator=","
    item="id" index="i">
    #{id}
   </foreach>
  </where>
 </select>
  * 使用foreach批量更新
  * @param map
 void updateByMap(Map<String,Object> map);
 <update id="updateByMap">
  update sys_user
   <foreach collection="_parameter" item="val" index="key" separator=",">
    ${key} = #{val}
   </foreach>
  </set>
  where id=#{id}
 </update>
                    foreach介绍collection:必填,值为要迭代循环的属性名。这个属性值的情况有很多item :变量名,值为从迭代对象中取出来的每一个值index: 索引的属性名,在集合数组情况下值为当前索引值,当迭代循环的对象时Map类型时,这个值为map的key值open: 整个循环内容开头的字符串close:整个循环内容结尾的字符串separator: 每次循环的分隔符参...
&amp;amp;amp;amp;amp;amp;amp;amp;lt;insert id=&amp;amp;amp;amp;amp;amp;amp;quot;batchDoubleForeachInsertTest&amp;amp;amp;amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;amp;gt;
    insert in
				
1、foreach标签 <foreach collection="list" item="item" index="index" open="" close="" separator=";"> update table_test name = #{item.name}, date_updated =now() where id= #{
最近做项目过程中,涉及到需要在 Mybatis 中 使用 foreach 进行循环读取传入的查询条件,动态拼接SQL语句,接口传入的查询条件格式:{“advanceSearchList”:[{“searchType”:10,“searchText”:“12”}]} ,根据我定义的参数格式,需要在 Mybatis中动态去循环读取advanceSearchList 集合中的json对象,并根据 json对象中的searchType 做不同的处理,需要在 foreach 中嵌套 if 标签进行判断使用。 在【Mybatis】功能强大的动态SQL之if与choose(03)中介绍了Mybatis动态SQL的if用法,这一节将重点介绍foreach的用法。 在实际的业务场景中,业务层通常会将批量数据放入集合或者数组传给Dao层,并做相应的增删改查操作,而Mybatis可以利用foreach元素来处理集合。 foreach实现批量查询 在学习foreach之前,先给大家回顾一下SQL语句中的or和in的用法。 下面给出查询语句需要用到的表数据,一共七条数据。
在做mybatis的mapper.xml文件的时候,我们时常用到这样的情况:动态生成sql语句查询条件,这个时候我们就可以用mybatisforeachforeach元素的属性主要有item,index,collection,open,separator,close。 item:集合中元素迭代时的别名,该参数为必选。 index:在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选 open:foreach代码的开始符号,一般是(和close=")"合用。.
<iftest="list!=null"> <foreachcollection="list" item="item" index= "index" open="" close="" separator =";"> update XXX
近日,项目中有一个耗时较长的Job存在CPU占用过高的问题,经排查发现,主要时间消耗在往MyBatis批量插入数据。mapper configuration是用foreach循环做的,差不多是这样。(由于项目保密,以下代码均为自己手写的demo代码) <insert id="batchInsert" parameterType="java.util.List"> insert into USER (id, name) values <foreach collect...
create table sql_test.on_duplicate_key_update_employee id int not null, name varchar(20) null, pa...
<update id="updateIsDelStatus" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" separator=";" close="" open=""> updat...
MyBatis 的 `foreach` 标签可以用来遍历集合,并为每个元素执行相同的 SQL 语句。在 `insert` 语句中使用 `foreach` 可以实现批量插入。 例如,在 MyBatis 的 XML 配置文件中,可以这样使用 `foreach` 标签来执行批量插入: ```xml <insert id="insertUsers" parameterType="java.util.List"> insert into users (name, age) values <foreach collection="list" item="user" index="index" separator=","> (#{user.name}, #{user.age}) </foreach> </insert> 在这里,`foreach` 遍历了一个名为 `list` 的集合,并为每个元素执行了一次 `insert into users (name, age) values (#{user.name}, #{user.age})` 语句。 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 14993