当前位置: 首页 > 知识库问答 >
问题:

在MyBatis中有没有一种方法可以在foreach中使用序号枚举

廖鸿达
2023-03-14

我试图在foreach循环中用mybatis动态地过滤一个select-query。

<if test="array!= null and array.length > 0">
   AND arrayValCol IN
      <foreach item="item" collection="array" separator="','" open="('" close="')">
         ${item}
      </foreach>
</if>

共有1个答案

韩捷
2023-03-14
  • 默认情况下,MyBatis使用EnumTypeHandler,它在绑定枚举参数时调用name()方法。您需要告诉MyBatis使用EnumordinalTypeHandler
  • 尽可能使用#{}而不是${}。请参阅常见问题解答。
<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>
 类似资料:
  • 问题内容: 嗨,我想使用WMI类来查找应用程序和产品信息。但是问题是我想使用Java或任何脚本语言(如python,javascript或perl)。我听说过JWMI,这可能是一个选择。有人可以帮我吗??? 问题答案: JavaScript和Java不是一回事。 JavaScript Windows脚本宿主(WSH)下提供了JavaScript。有了它,访问WMI相当容易: jWMI(Java)

  • 问题内容: 假设我有以下代码: 这段代码的问题在于,协程内部的循环永远不会完成第一次迭代,而大小会不断增加。 为什么会这样发生,我该怎么解决? 我无法摆脱单独的线程,因为在我的真实代码中,我使用了单独的线程与串行设备进行通信,而且我还没有找到使用的方法。 问题答案: 不是线程安全的,因此您不能直接在多个线程中直接使用它。相反,您可以使用,它是提供线程感知队列的第三方库: 还有(全披露:我写了它),

  • 我只需要一个标题,味精和按钮警报对话框,但显示为底部工作表。 哪里有一种方法可以获得这个(没有自定义视图)?

  • 问题内容: 我希望用户输入时间,例如12:00,但是我需要弄清楚一些事情,我实在是太可惜了。 我可以将文字限制为5个字符吗? 我可以在代码中嵌入冒号,以便用户无法删除它吗? 最后,我可以接受该代码并验证它只是数字(当然忽略了冒号) 问题答案: 答案是使用JFormattedTextField和MaskFormatter。 例如: Java编译器将要求您在创建MaskFormatter时捕获或抛出P

  • 问题内容: 我有Visio2007,我真的很喜欢。但是,它似乎没有Java的UML模型/数据类型。我可以为Java下载一些模板吗?还是我应该完全忘记Visio并获得一个Elipse插件? 谢谢! 问题答案: 后者是更好的选择,恕我直言。此外,我认为UML模型不应该特定于Java。我不知道周围是否有特定于Java的UML。 我在网上搜索时发现了这个。UML模型:MS Visio 2007。

  • 问题内容: 我只想在编译时在Java类中使用maven占位符,以减少重复。 像这样: pom.xml SomeVersion.java 问题答案: 只需在src / main / resources中创建具有以下内容的文件app.properties 然后像这样启用Maven过滤 就是这样-在应用程序代码中只需读取属性文件 并提供这样的方法