MyBatis动态语句 -- foreach标签

1. 基本用法

  • collection属性:要遍历的集合
  • item属性:遍历集合的过程中能得到每一个具体对象,在item属性中设置一个名字,将来通过这个名字引用遍历出来的对象
  • separator属性:指定当foreach标签的标签体重复拼接字符串时,各个标签体字符串之间的分隔符,如果是最后一次,不会追加
  • open属性:指定整个循环把字符串拼好后,字符串整体的前面要添加的字符串
  • close属性:指定整个循环把字符串拼好后,字符串整体的后面要添加的字符串
  • index属性:这里起一个名字,便于后面引用
    • 遍历List集合,这里能够得到List集合的索引值
    • 遍历Map集合,这里能够得到Map集合的key
<foreach collection="empList" item="emp" separator="," open="values" index="myIndex">
    <!-- 在foreach标签内部如果需要引用遍历得到的具体的一个对象,需要使用item属性声明的名称 -->
    (#{emp.empName},#{myIndex},#{emp.empSalary},#{emp.empGender})
</foreach>

2. 批量查询举例

传入一个id列表,根据每一个id的值去查询具体信息

<select id="queryBatch" resultType="employee">
    select * from t_emp
           where emp_id in
           <!-- 遍历的数据
               ( 1 , 2 , 3  )
           -->
           <foreach collection="ids" open="(" separator="," close=")" item="id">
                 <!-- 遍历的内容, #{遍历项 item指定的key}-->
                 #{id}
           </foreach>
    </select>

3. 批量删除举例

传入一个id列表,根据每一个id的值去删除信息

<delete id="deleteBatch">
    delete from t_emp where id in
        <foreach collection="ids" open="("  separator="," close=")" item="id">
            #{id}
        </foreach>
</delete>

4. 批量插入举例

<insert id="insertBatch">
    insert into t_emp (emp_name,emp_salary)
              values
              <foreach collection="list" separator="," item="employee">
                  (#{employee.empName}, #{employee.empSalary})
              </foreach>
</insert>

5. 批量修改举例

<update id="updateBatch">
    <foreach collection="list" item="emp">
        update t_emp set emp_name = #{emp.empName} , emp_salary = #{emp.empSalary}
        where  emp_id = #{emp.empId} ;
    </foreach>
</update>

6. 总结

  • 例如修改语句,我们找不到需要循环的sql片段,那就可以把整个sql语句循环。
  • 如果一个标签涉及多个语句! 需要设置允许指定多语句 !在数据库连接信息的URL地址中设置: allowMultiQueries=true
  • 如果没有给接口中List类型的参数使用@Param注解指定一个具体的名字,那么在collection属性中默认可以使用collection或list来引用这个list集合。
  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mybatis中的<foreach>标签有六个属性,分别是collection、item、separator、open、close和index。 - collection属性用于指定循环的集合,可以是list、array或map类型的参数。 - item属性用于指定集合中的每个元素在循环过程中的参数名。 - separator属性用于指定每个子循环结束后的分隔符,默认为逗号。 - open属性用于指定循环开始的符号,默认为空。 - close属性用于指定循环结束的符号,默认为空。 - index属性用于指定集合中元素的索引,只在list、array和map类型参数中有效。索引从0开始自增,相当于数组下标。 这些属性可以根据需要来灵活配置,以满足各种循环操作的需求。在Mybatis中,<foreach>标签常用于批量插入或批量更新表数据的操作。在批量插入中,可以使用<foreach>标签将多个参数值拼接成一条SQL语句,以提高执行效率。在批量更新中,可以使用<foreach>标签将多个参数值作为IN函数的参数,来更新满足条件的记录。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Mybatisforeach标签带来的空格\换行\回车问题及解决方案](https://download.csdn.net/download/weixin_38609401/12725727)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Mybatis标签<foreach>详解](https://blog.csdn.net/qq_36631553/article/details/105680200)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值