为什么mybatis3不支持设置foreach?

时间:2016-11-21 05:19:09

标签: java mybatis sqlmap

如果parameterType为java.util.Set或其实现,则使用此参数执行foreach会抛出java.lang.UnsupportedOperationException

<select id="selectList" parameterType="java.util.HashSet" resultMap="someMap">
    SELECT key FROM tb_my_table
    WHERE value IN (
        <foreach collection="set" item="item" separator=",">
        #{item}
        </foreach>
    )
</select>

mybatis3中的原因CollectionWrapper未实现get方法,只是抛出异常。
我想知道它是否是预期的设计和原因。

1 个答案:

答案 0 :(得分:1)

使用集合的documentation状态是可能的:

  

您可以传递任何可迭代对象(例如List,Set等)   以及作为集合参数foreach的任何Map或Array对象。

我可以使用Mybatis 3.2.7重现异常。

但它与Mybatis 3.3.0一起工作正常。

请注意,单个参数的预期名称为 集合

<select id="selectList" parameterType="java.util.HashSet" resultMap="someMap">
    SELECT key FROM tb_my_table
    WHERE value IN (
        <foreach collection="collection" item="item" separator=",">
        #{item}
        </foreach>
    )
</select>