Mybatis中XML中传不同类型的参数时,collection注意事项

<foreach> 类似JAVA中的for循环,可以遍历集合或数组。 <foreach> 有如下属性:

collection :遍历的对象类型(数组、List、Map)
open :表示该语句以什么开始,常用 “(”;
close : 表示以什么结束,常用 “)”。
separator :表示在每次进行迭代之间以什么符号作为分隔符,常用 “,”;
item :表示集合中每一个元素进行迭代时的别名,随便起的变量名,遍历 map 时表示键值对的值。
index :遍历 List 、数组时表示遍历的索引位置,遍历 map 时表示键值对的键。

collection 属性是在使用foreach的时候最容易出错的,该属性是必须指定的,但是在不同场景下,该属性的配置是不一样的,常用的主要有3种情况:

1.<foreach>标签迭代Array数组

collection传入array即可!

//    4.批量删除指定id的一些数据,测试动态SQL的<foreach>标签,遍历Array
//    按给定的id值进行批量删除数据,传入一个数组,数组中包含要删掉的id值
//    系统的删除语句:delete from user where id in(12,13,14,16,17,18)
//    用途:测试<foreach>标签,遍历Array数组
    void deleteBatch(int[] ids);
    <!--4.批量删除指定id的一些数据,测试动态SQL的<foreach>标签,遍历Array-->
    <!-- collection:遍历的对象类型
               open:开始的sql语句
              close:结束的sql语句
          separator:遍历每项间的分隔符(自定义分隔符形式形式,如逗号、、、)
               item(名字自定义):表示本次遍历获取的元素,遍历List、Set、Array时表示每项元素,遍历Map时表示键值对的值
              index:遍历List、Array时表示遍历的索引,遍历Map时表示键值对的键-->
    <delete id="deleteBatch" parameterType="int">
        delete from user
        <where>
            <foreach  collection="array" open="id IN(" close= ")" separator="," item="id">
                #{id}
            </foreach>
        </where>
    </delete>

2.<foreach>标签迭代List

<foreach> 遍历List和Set的方法是一样的,这里使用 <foreach> 遍历List集合进

行批量添加,collection传入list即可!

//      5.批量插入数据,测试动态SQL的<foreach>标签,遍历Collection
//       系统插入语句:insert into user(username,sex,address) values(),(),()
//    批量新增方法,测试<foreach>标签,遍历Collection集合
    void insertBatch(List<User> user);
   <!--5.批量插入数据,测试动态SQL的<foreach>标签,遍历Collection-->
    <!--Collection:遍历的对象类型     item:遍历获取的元素(名字自定义,可以调用字段名进行传参) separator:分隔符-->
    <insert id="insertBatch" parameterType="User">
        insert into user(username,sex,address) values
        <foreach collection="list" item="user" separator=",">
            (#{user.username},#{user.sex},#{user.adddress})
        </foreach>
    </insert>

3.<foreach>标签迭代Map

注意:1.collection:传入的不是遍历的对象类型map,List、Set、Array传入的类型分别是list、set、array,但Map集合传入的不是map,而是持久层接口中定义的参数名 如:@Param("queryMap")

//    6.多条件查询:批量查询方法,测试<foreach>标签,遍历Map集合
    /**
     * 多条件查询:批量查询方法,测试<foreach>标签,遍历Map集合
     * @param map 查询的条件键值对   键:属性名  值:出入要查询的属性名
     *            系统的查询语句:select * from user where username = ? and sex = ?
     * @return
     *              @Param:为参数起别名
     */
    List<User> findUser(@Param("queryMap") Map<String,Object> map);
    <!--6.多条件查询:批量查询方法,测试<foreach>标签,遍历Map集合-->
    <!--注意:1.collection:传入的不是遍历的对象类型,List、Set、Array传入的类型分别是list、set、array,
             但Map集合传入的不是map,而是持久层接口中定义的参数名 如:@Param("queryMap")
             2.separator:传入的是and不是逗号,因为查询给定的条件是and连接,修改是逗号连接
             3.index:Map类型的键,起名为key    item:Map类型的值,起名为value
             4.特别注意:sql语句key=value(键=值),键只能用${},作为字符串拼接到sql语句中,因为键是属性名
                                               值可以用#{},作为占位符-->
    <select id="findUser" parameterType="map" resultType="User">
        select * from user
        <where>
            <foreach collection="queryMap" separator="and" index="key" item="value">
                ${key} = #{value}
            </foreach>
        </where>
    </select>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值