Mybatis 的 foreach语句批量操作

foreach 标签

foreach 标签主要用于构建 in 条件,可在 sql 中对集合进行迭代。也常用到批量删除、添加等操作中。

<!-- in查询所有,不分页 -->
<select id="selectIn" resultMap="BaseResultMap">
    select name,hobby from student where id in
    <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
        #{item}
    </foreach>
</select>
  • collection:collection 属性的值有三个分别是 list、array、map 三种

  • item :表示在迭代过程中每一个元素的别名

  • index :表示在迭代过程中每次迭代到的位置(下标)

  • open :前缀

  • close :后缀

  • separator :分隔符,表示迭代时每个元素之间以什么分隔

参数

  1. 只有一个数组参数或集合参数
    1. 当参数类型为集合的时候,默认会转换为map类型,并添加一个key为collection的值
    2.  如果参数类型是List集合,那么就继续添加一个key为list的值 -
    3. 当参数类型为数组的时候,也会转成map类型,默认的key为array
  2. 有多个参数
    1. 当有多个参数的时候,要使用@Param注解给每个参数指定一个名字,否则在SQL中使用参数时就会不方便。因此将collection设置为@Param注解指定的名字
  3. 参数时Map类型
    1. 使用Map和使用@Param注解方式类似,将collection指定为对应Map中的key即可 -
    2. 如果要循环所传入的Map,推荐使用@Param注解指定名字,此时可将collection设置为指定的名字
    3. 如果不想指定名字,就使用默认值_parameter

批量查询

 <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
  <set>
   <foreach collection="_parameter" item="val" index="key" separator=",">
    ${key} = #{val}
   </foreach>
  </set>
  where id=#{id}
 </update>

 批量模糊匹配

<!-- 利用foreach根据多个品牌名字分类,模糊搜索数据 -->
<select id="listGoodBrand" resultMap="goodsMap">
	SELECT id,name,type FROM  goods_brand WHERE delete_flag=0 and 
	   <foreach collection="goodList" item="item" index="index"  open="(" separator="or" close=")">
              name LIKE CONCAT('%',#{item},'%')
       </foreach>
    order by id desc
</select>

separator=“or” 这个属性拼接 sql

批量插入

<!-- 批量插入-->
<insert id="batchSave">
	INSERT INTO dhz_role_menu(role_id,menu_id,create_time)
	  values
    <foreach item="item" index="index" collection="list" separator=",">
	  (#{item.roleId},#{item.menuId},now())
    </foreach>
</insert>

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值