具体的基本使用方法可参考官方文档:https://mp.baomidou.com/guide/enum.html ,这里只想列出遇到的一些问题及解决方法。
本人系统中使用的mp版本是3.0.6(3.1.0以后使用更简便)。
本人在一个实体对象中使用了两个枚举类型AuditMethodEnum
和EnableStatusEnum
,代码如下:
@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);
}
}
可是在取到的结果里auditMethod
和status
这两个值都为null,最后发现因为status
的类型是tinyint(1)
,在com.baomidou.mybatisplus.extension.handlers.EnumTypeHandler
里从表里取出的值被自动当成Boolean
类型来处理了,从而导致两个Enum都为null, 把status
的类型改为默认的tinyint(4)
就可以了。
来源:oschina
链接:https://my.oschina.net/jenqz/blog/4270892