如何在下面的SELECT查询中直接获取Java枚举序数值?
枚举状态
package com.enum;
public enum Status {
A, B, C, D, E;
}
Aa类
package com.prj;
import com.enum.Status;
public class Aa {
private Long id;
private String name;
private Status status; // store enum ordinal in table aa
}
以下查询不起作用。
<select id="getAaValidIds" resultType="Long">
SELECT
aa.id
FROM
aa aa
WHERE
aa.status = @com.enum.Status$A.ordinal()
OR aa.status = @com.enum.Status$B.ordinal()
</select>
答案 0 :(得分:0)
您可以将OGNL表达式与${}
一起使用。
WHERE
aa.status = ${@com.enum.Status@A.ordinal()}
OR aa.status = ${@com.enum.Status@B.ordinal()}
以下是原始答案。
错误地假定枚举作为参数传递。
有一个内置的类型处理程序。
您可以为每个参数指定javaType
和typeHandler
。例如
WHERE
aa.status = #{status,javaType=com.enum.Status,typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler}
OR aa.status = #{status,javaType=com.enum.Status,typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler}
或者,如果您始终对Status
使用此类型处理程序,则最好在配置中全局注册它。
<typeHandlers>
<typeHandler
javaType="com.enum.Status"
handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" />
</typeHandlers>
那你就可以写...
WHERE
aa.status = #{status}
OR aa.status = #{status}