0

如果 parameterType 是java.util.Set或其实现,则使用此参数执行 foreach throws 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方法,只是抛出了一个异常。
我想知道它是否是有意的设计和原因。

4

1 回答 1

3

文档指出使用 Sets 是可能的:

您可以将任何 Iterable 对象(例如 List、Set 等)以及任何 Map 或 Array 对象作为集合参数传递给 foreach。

我可以用 Mybatis 3.2.7 重现异常。

但它在 Mybatis 3.3.0 上运行良好。

请注意,单个参数的预期名称是collection

<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>
于 2016-11-21T11:41:43.993 回答