为什么mybatis3不支持set foreach?
Why doesn't mybatis3 support Set foreach?
如果 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
方法,只是抛出一个异常。
我想知道是不是故意设计的以及原因。
documentation 声明可以使用集合:
You can pass any Iterable object (for example List, Set, etc.), as
well as any Map or Array object to foreach as collection parameter.
我可以用 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>
如果 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
方法,只是抛出一个异常。
我想知道是不是故意设计的以及原因。
documentation 声明可以使用集合:
You can pass any Iterable object (for example List, Set, etc.), as well as any Map or Array object to foreach as collection parameter.
我可以用 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>