MyBatis - 按枚号选择数据作为序数

时间:2015-11-26 21:49:00

标签: enums mybatis

我有一个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,但它没有任何意义。

任何提示赞赏

2 个答案:

答案 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}