您的位置:首页 > 产品设计 > UI/UE

mybatis获取map中的key和value

2017-08-21 13:57 281 查看
    方式一:

    dao接口

int updateByBatch(@Param("content") Map<String, Integer> alreadySoldNumMap);
    mapper

<update id="updateByBatch" parameterType="java.util.Map">
update COUPON_CATEGORY
<trim prefix="set" suffixOverrides=",">

<trim prefix="ALREADY_SOLD_NUM = case" suffix="end,">
<foreach collection="content.keys" item="key" index="index">
when ID=#{key} then ALREADY_SOLD_NUM+#{content[${key}]}
</foreach>
</trim>

</trim>
where
<!-- 循环key  -->
<foreach collection="content.keys" separator="or" item="key" index="index">
ID=#{key}
</foreach>
</update>
    这种方式#{content[${key}]}获取map中的value,传递的map中的key只能是String类型,如果是其他类型,得到的value是null。#{content[${key}]}还可以写成${content[key]}方式。
<!-- 循环value  -->
<foreach collection="content.values" separator="or" item="value" index="index">
ALREADY_SOLD_NUM=#{value}
</foreach>


    方式二:如果传入的map的key要适用所有类型,可以使用下面的方式

                 遍历Map中的entrySet,然后把key扔进index里面,value扔进item中。

    例如:dao接口,map的key用Long类型

int updateByBatch(@Param("content") Map<Long, Integer> alreadySoldNumMap);

     mapper

<update id="updateByBatch" parameterType="java.util.Map">
update COUPON_CATEGORY
<trim prefix="set" suffixOverrides=",">

<trim prefix="ALREADY_SOLD_NUM = case" suffix="end,">
<foreach collection="content.entrySet()" item="value" index="key">
when ID=#{key} then ALREADY_SOLD_NUM+#{value}
</foreach>
</trim>

</trim>
where
<foreach collection="content.keys" separator="or" item="key" index="index">
ID=#{key}
</foreach>
</update>


参考博客:http://blog.csdn.net/clementad/article/details/55099432

    另附:

    在解决此问题的过程当中,使用的是测试类,可以就是在console中打印不出sql语句来。参考了这篇文章《mybatis结合log4j打印SQL日志》,找到了sql语句。

    小编使用的方法是直接调试出sql语句。SimpleExecutor.class在mybatis.jar包里面。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis