Есть ли способ использовать порядковый номер enum в foreach в MyBatis? - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь динамически фильтровать запрос на выборку с mybatis в цикле foreach.

Вот пример из моего картографа 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 Ответ

1 голос
/ 15 октября 2019
  • По умолчанию 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>

Также можно изменить стандартный обработчик типа enum, указав defaultEnumTypeHandler в конфигурации.

<settings>
  <setting name="defaultEnumTypeHandler"
    value="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
</settings>
...