我有一节ENUM课
private OrderStatus status;和sql
<select id="getOrder" parameterType="map" resultMap="OrderMap">
SELECT * FROM Order WHERE
status = #{status, typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler}
</select>和服务
@Override
public Order getOrder(OrderStatus status) {
return this.orderMapper.getOrder(status);
}在insert或update SQL中工作正常,但在select中出现错误
引发的异常嵌套异常为org.apache.ibatis.type.TypeException:无法调用处理程序类org.apache.ibatis.type.EnumOrdinalTypeHandler的构造函数,根本原因为java.lang.IllegalArgumentException: Object不表示枚举类型。
我可以使用status.ordinal()将参数传递给SQL,但是这样做没有任何意义。
有什么建议吗?
发布于 2016-01-04 16:54:08
您应该在mybatis-config.xml文件中注册枚举类的EnumOrdinalTypeHandler
<typeHandlers>
<typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="com.yourpackage.OrderStatus "/>
</typeHandlers>发布于 2020-06-12 23:47:42
如果你有一个自定义的枚举,那么你也应该指定这个元素的javaType属性。在我的例子中,MyBatis已经将元素转换为字符串,因此不能再将其作为枚举处理。
在您的示例中,您应该尝试:
#{status,
jdbcType=INTEGER,
javaType=my.custom.enum.OrderStatus,
typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler}https://stackoverflow.com/questions/33947485
复制相似问题