我正试图产生一个如下mybatis中的SQL。如何通过MyBatis foreach中的HashMap进行迭代?
SELECT COL_C
FROM TBLE_1
WHERE (COL_A, COL_B) in (('kp','kar'),('srt','sach'));
而我的输入参数类型是HashMap。现在如何从mapper xml文件生成SQL。下面的代码会抛出异常,并将映射评估为null。
<select id="selectCOLC" parameterType="java.util.HashMap" resultType="String">
SELECT COL_C
FROM TBLE_1
WHERE (COL_A, COL_B) in
<foreach item="item" collection="#{map.keySet()}" open="((" separator="),(" close="))">
#{item},#{item.get(item)}
</foreach>
</select>
其中的另一种方法是创建具有关键值字段类,创建对象的列表,然后通过parameterType
为list
它看起来像下面。
<select id="selectCOLC" parameterType="list" resultType="String">
SELECT COL_C
FROM TBLE_1
WHERE (COL_A, COL_B) in
<foreach item="item" collection="list" open="((" separator="),(" close="))">
#{item.getKey()},#{item.getVal()}
</foreach>
</select>
但是,有没有办法让我的mapper工作的第一种方法?除了将查询更改为union之外
**请注意:由于版本3.2.x中这种方式被打破**: - 版本3.2.x中有一个直接支持使用_ _ [map#] [问题#709](https://code.google.com/p/mybatis/issues/detail?id=709)并且必须将其重写为这种新形式 - 请参见[问题#208](https://github.com/mybatis/mybatis-3/pull/208)或@foghost解决方案 –
请指出 –
@MichalBernhard请问您可以发布你自己的答案?这将有助于更多的游客。 –