如何在MyBatis foreach中迭代HashMap?

我正在尝试在mybatis中生成如下所示的sql。

SELECT COL_C FROM TBLE_1 WHERE (COL_A, COL_B) in ( ('kp','kar'),('srt','sach')); 

我的输入参数类型是HashMap。 现在如何从mapper xml文件生成SQL。 下面的代码抛出exception,说map被评估为null。

  SELECT COL_C FROM TBLE_1 WHERE (COL_A, COL_B) in  #{item},#{item.get(item)}   

另一种方法是创建一个具有键值字段的类,创建一个对象列表,然后将parameterType作为list传递,如下所示。

  SELECT COL_C FROM TBLE_1 WHERE (COL_A, COL_B) in  #{item.getKey()},#{item.getVal()}   

但有没有办法让我的mapper工作第一种方法? 除了将查询更改为union之外

从版本3.2开始,此解决方案不起作用 – 请参阅问题#208中的更多信息 !

最后我得到了HashMap的解决方案

我应该使用entrySet()以使其可迭代

  

还有一个Isue我面临的参数名称没有被注入,因此添加了@Param注释

因此mapper界面如下所示。

 List selectCOLC(@Param("entries") HashMap entries) 

这是我的项目中的一个例子,它工作正常

  

在您的第一个示例中,mybatis正在使用键“map”在parameterMap中查找条目。 我怀疑你实际上是在尝试迭代parameterMap的键集。 如果使用键“map”在参数映射中嵌套映射,它应该可以工作。

在第二个示例中,您应该只能传递提供getKey和getValue的HashMap.entrySet()。