首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MyBatis -按where枚举作为序号选择数据

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

Stack Overflow用户
提问于 2015-11-27 05:49:00
回答 2查看 2.5K关注 0票数 0

我有一节ENUM课

代码语言:javascript
复制
private OrderStatus status;

和sql

代码语言:javascript
复制
<select id="getOrder" parameterType="map" resultMap="OrderMap">
SELECT * FROM Order WHERE 
status = #{status, typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler}
</select>

和服务

代码语言:javascript
复制
@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,但是这样做没有任何意义。

有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2016-01-04 16:54:08

您应该在mybatis-config.xml文件中注册枚举类的EnumOrdinalTypeHandler

代码语言:javascript
复制
<typeHandlers>
        <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="com.yourpackage.OrderStatus "/>
</typeHandlers>
票数 1
EN

Stack Overflow用户

发布于 2020-06-12 23:47:42

如果你有一个自定义的枚举,那么你也应该指定这个元素的javaType属性。在我的例子中,MyBatis已经将元素转换为字符串,因此不能再将其作为枚举处理。

在您的示例中,您应该尝试:

代码语言:javascript
复制
#{status,
  jdbcType=INTEGER,
  javaType=my.custom.enum.OrderStatus, 
  typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33947485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档