有没有办法在MyBatis的foreach中使用枚举序数

时间:2019-10-15 12:25:02

标签: java xml mybatis

我正在尝试在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中找不到任何解决方案。

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

  • 默认情况下,MyBatis使用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>