如何在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()。