问答

mybatis:字段默认值是空串,对应类为枚举类ValidStatus

作者:admin 2021-04-19 我要评论

mybatis 字段默认值是空串,对应字段为枚举类ValidStatus, 查询时报 No enum constant com...ValidStatus. 请问, 能忽略掉空串, 直接将ValidStatus字段值转为...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

mybatis 字段默认值是空串,对应字段为枚举类ValidStatus, 查询时报 No enum constant com...ValidStatus.

请问, 能忽略掉空串, 直接将ValidStatus字段值转为null吗?

###

mybatis默认的枚举类型处理器
EnumTypeHandler
mybatis的默认枚举类型处理器,将枚举类型的name持久化到数据库;

EnumOrdinalTypeHandler
mybatis原生支持的另一种枚举类型处理器,将枚举类型的索引序号持久化到数据库,需要全局配置或者在需要的字段上单独配置;

mybatis在3.4.5及之后版本中,新增了一个指定全局默认枚举类型处理器的配置项;
在mybatis-config.xml中添加如下配置即可使自定义处理器全局生效,解决了之前新增枚举都需要单独配置的烦恼;

<configuration>
    <settings>
        <!--指定 Enum 使用的默认 TypeHandler (新增于 3.4.5)-->
        <setting name="defaultEnumTypeHandler" value="com.xxx.demo.enum.SelfDefineEnumTypeHandler"/>
    </settings>
    <!-- 其他配置省略 -->

默认枚举处理器的处理方式:
org.apache.ibatis.type.EnumTypeHandler#getNullableResult(java.sql.ResultSet, java.lang.String):

 @Override
 public E getNullableResult(ResultSet rs, String columnName) throws SQLException {
      String s = rs.getString(columnName);
      return s == null ? null : Enum.valueOf(type, s);
 }

上边, s 为 null 时, 就会调用 Enum.valueOf() 方法, 将 s 转化为相应的枚举值。 可是 ,数据库中定义字符串字段时,通常不会将默认值设置为 null, 而是会设置为空串,这样, 空串不能转化为枚举值, 就会报

throw new IllegalArgumentException(
            "No enum constant " + enumType.getCanonicalName() + "." + name);

的异常。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器