我正在尝试在foreach循环中动态过滤带有mybatis的选择查询。
这是我的xml映射器中的一个示例:
<if test="array!= null and array.length > 0">
AND arrayValCol IN
<foreach item="item" collection="array" separator="','" open="('" close="')">
${item}
</foreach>
</if>
但是数组包含枚举作为值,我在mybatis文档或google中找不到任何解决方案。
有没有办法解决这个问题?
答案 0 :(得分:1)
EnumTypeHandler
绑定绑定枚举参数时调用name()
方法。您需要告诉MyBatis改用EnumOrdinalTypeHandler
。#{}
而不是${}
。请参阅FAQ。<if test="array!= null and array.length > 0">
AND arrayValCol IN
<foreach item="item" collection="array" separator="," open="(" close=")">
#{item,typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler}
</foreach>
</if>
还可以通过在配置中指定defaultEnumTypeHandler
来更改默认的枚举类型处理程序。
<settings>
<setting name="defaultEnumTypeHandler"
value="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
</settings>