我有一个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);
}
在插入或更新SQL中工作正常,但在选择时会发生错误
引发异常[嵌套异常是org.apache.ibatis.type.TypeException:根据原因调用处理程序类org.apache.ibatis.type.EnumOrdinalTypeHandler的构造函数失败] java.lang.IllegalArgumentException:Object不表示枚举类型。
我可以使用status.ordinal()将参数传递给SQL,但它没有任何意义。
任何提示赞赏
答案 0 :(得分:0)
你应该在mybatis-config.xml中为你的枚举类注册EnumOrdinalTypeHandler
<typeHandlers>
<typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="com.yourpackage.OrderStatus "/>
</typeHandlers>
答案 1 :(得分:0)
如果您有一个自定义的Enum,则还应该指定此元素的javaType属性。在我的情况下,MyBatis已经将元素转换为String,因此无法再将其作为枚举来处理。
在您的示例中,您应该尝试:
#{status,
jdbcType=INTEGER,
javaType=my.custom.enum.OrderStatus,
typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler}