mybatis的foreach标签(记录那些自己走过的坑)

1.foreach标签介绍

主要参数:

collection:要循环的集合,有三个参数类型 array、List、Map,这是传递的参数类型。这里有注意的地方,当传递一个包含list的map集合时也可以不用这么写,下面会有说明。
index:循环的索引,随便写,不用在意。
item:集合中的一个元素 相当于for (String string : list)中的string
open:一开始自己写xml时,看网上说这个是什么开可以省略,没怎么懂。自己写的时候看mybatis拼接的SQL语句,发现过这是个是SQL语句里函数的括号,看下图。
图1
close:同上
separator:循环内容之间以“,”分隔。可以参看上图
mybatis接受的参数分为:(1)基本类型;(2)对象;(3)List;(4)数组;(5)Map

mybatsi的foreach标签xml文件写法示范:
说明一下 “jdbcType=INTEGER ”是为了说明java传递给Mybatis的参数,我这里age是int类型,对应的jdbcType是INTEGER。关于jdbcType其他类型的参数可以看MyBatis 通过包含的jdbcType类型
parameterType里写的传递的参数,这里是java.util.List,因为传递的是list。
resultType写的是User,如果你没在sqlMapConfig.xml 文件里的typeAliases标签里配置类的路径,也可以在这写,比如“com.domain.User”

    <select id="bylike" parameterType="java.util.List" resultType="User">
        SELECT * FROM user
        WHERE 1=1
        AND age IN
        <foreach collection="list" item="item" index="index"  separator="," open="(" close=")">
            #{item.age,jdbcType=INTEGER}
        </foreach>
    </select>

foreach内多参数写法

<update id="update" parameterType="java.util.List">
        INSERT INTO user (name,age,sex,user_id,friend_id) VALUES
        <foreach collection="list" item="item" index="index" separator="," >
            (
            #{item.name,jdbcType=VARCHAR},
            #{item.age,jdbcType=INTEGER},
            #{item.sex,jdbcType=VARCHAR}
            )
        </foreach>
    </update>

mybatis传入多个参数时,用map进行封装,collection可以这么写
dao层的接口

    //这里hashMap主要有两个参数,一个是关键字,一个是idList。
    List<UserDO> searchByKeyWord(HashMap<String,Object> hashMap);

xml配置
由于是多个参数,用的传递的是map,不写parameterType没事。

<select id="searchByKeyWord" resultMap="user" >
        SELECT * FROM user u
        WHERE 1=1
        AND
        u.user_id IN
        <!-- **********这里idList对应的是我传递的hashMap一个键。-->
        <foreach collection="idList" item="item" index="index" open="(" separator="," close=")">
            #{item.userId ,jdbcType=INT}
        </foreach>
        <if test="keyWord !=null">
            AND u.user_name LIKE CONCAT('%',#{keyWord},'%')
        </if>
    </select>
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值