如果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
方法,只是抛出异常。
我想知道它是否是预期的设计和原因。
答案 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>