记Mybatis Plus中使用枚举类型时遇到的一个类型转换问题

走远了吗. 提交于 2020-05-09 00:44:13

具体的基本使用方法可参考官方文档:https://mp.baomidou.com/guide/enum.html ,这里只想列出遇到的一些问题及解决方法。 本人系统中使用的mp版本是3.0.6(3.1.0以后使用更简便)。 本人在一个实体对象中使用了两个枚举类型AuditMethodEnumEnableStatusEnum,代码如下:

@Data
@TableName(value = "audit_item")
@Accessors(chain = true)
public class AuditItem {
    @TableId(value = "id", type= IdType.AUTO)
    private Integer id;
    private String name;
    private AuditMethodEnum auditMethod;
    private String description;
    private Integer companyId;
    private Integer operatorId;
    private EnableStatusEnum status;
    private LocalDateTime createTime;
}

其中AuditMethodEnum如下:

public enum AuditMethodEnum implements IEnum {
    /**
     * 蓝牙
     */
    BLUETOOTH(1, "bluetooth"),
    /**
     * 二维码
     */
    QRCODE(2, "qrcode"),
    /**
     * NFC
     */
    NFC(3, "nfc"),
    ;

    @Getter
    @Setter
    private Integer value;

    @Getter
    @Setter
    private String description;

    AuditMethodEnum(final Integer value, String description) {
        this.value = value;
        this.description = description;
    }

    @Override
    public Integer getValue() {
        return this.value;
    }

    @JsonValue
    public String getDescription() {
        return MessageUtils.get("audit.method." + this.description);
    }
}

注:其中MessageUtils.get()是用来做多语言处理的。

另一个枚举EnableStatusEnum如下:

public enum EnableStatusEnum implements IEnum{
    /**
     * 可用
     */
    ENABLED(1, "enabled"),

    /**
     * 禁用
     */
    DISABlED(0, "disabled");

    @Getter
    @Setter
    private Integer value;

    @Getter
    @Setter
    private String description;

    EnableStatusEnum(final Integer value, String  description) {
        this.value = value;
        this.description = description;
    }

    @Override
    public Integer getValue() {
        return this.value;
    }
    @JsonValue
    public String getDescription(){
        return MessageUtils.get("enable.status." + this.description);
    }
}

可是在取到的结果里auditMethodstatus这两个值都为null,最后发现因为status的类型是tinyint(1),在com.baomidou.mybatisplus.extension.handlers.EnumTypeHandler里从表里取出的值被自动当成Boolean类型来处理了,从而导致两个Enum都为null, 把status的类型改为默认的tinyint(4)就可以了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!