I'm trying to produce a sql which is as below in mybatis.
SELECT COL_C
FROM TBLE_1
WHERE (COL_A, COL_B) in ( ('kp','kar'),('srt','sach'));
And my input parameter type is HashMap. Now How do I generate SQL from mapper xml file. The below code throws exception saying map evaluated to 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>
One of the other approach is to create a class with key value fields, create a list of object and then pass the parameterType
as list
which would look like following.
<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>
But is there any way to my mapper work for the first approach? other than changing the query to union
this is an example in my project and it works fine
<select id="getObject" parameterType="Map" resultType="hashmap">
select * from TABL where
<foreach collection="dataMap" index="key" item="value" open="" separator=" and " close="">
#{key}=#{value}
</foreach>
</select>