java - 有没有办法在 MyBatis 的 foreach 中使用枚举序号
问题描述
我正在尝试在 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 文档或谷歌中找不到任何解决方案。
有没有办法解决这个问题?
解决方案
- 默认情况下,MyBatis在绑定枚举参数时使用
EnumTypeHandler
which call方法。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>
推荐阅读
- amazon-web-services - Trigger AWS Lambda once SQS fifo queue is not empty
- sql - Incorrect day of the week in Oracle Function
- c# - TemplateBinding not working with command WPF
- rdp - Teaking FreeRDP for a developper workstation accross seas?
- python - Plotly:如何使用 pandas 数据框作为源按行填充表格
- python - Storing list of lists in matrix format
- amcharts - Broken styles with amcharts4
- python - variable change in nested func not recognized in other func with variable passed as arg
- c# - Httpclient getting the download speed
- json - Flutter - The method '[]' was called on null