前言
在开发中经常会用到数字标识一种状态,比如status字段为 0代表“已审核”,1代表“未审核”,2代表“已拒绝”,在这种情况下,开发的时候我们可能会自己写静态常量类或者枚举类标识其中的属性,如下:
public static enum ChildrenStatus{
examined(0, "已审核"),
examining(1, "未审核"),
notPassExamining(2, "已拒绝");
ChildrenStatus(Integer value, String name) {
this.value = value;
this.name = name;
}
private final Integer value;
private final String name;
public Integer getValue() {
return value;
}
public String getName() {
return name;
}
}
当我们需要对数据库操作的时候,可以直接PraiseStatus.isPraised.getValue()来取得这个值,这是最普遍的用法,但是这种方式有一个痛点,就是在查询操作之后,那么返回的也是字段值,比如0、1、2,自己在做后台项目的时候,需要当前数据状态展示出来的时候,只能自己判断当前值,再做返回,比如layui的操作:
{field: 'status', title: '状态 ', align: "center", templet: function (d) {
if (d.status == 0) {
return "已审核";
}
if (d.status == 1) {
return "<span class=\"layui-btn layui-btn-normal layui-btn-xs\" lay-event=\"verify\">未审核</span>";
}
if (d.status == 2) {
return "<span style=\"color: #f50803;\">已拒绝</span>";
}
}},
上面的span标签是返回的颜色样式做区分,在这里不做讨论,所以这样的操作的话在写后台页面会加大工作量,而且对接前端人员的时候,也需要在接口文档里把这些字段标识描述清楚,前端才能进行工作。MybatisPlus对这一情况做了优化,能够让我们在查询数据库的,直接能够返回字段标识的意思,只需要3步配置
- 创建枚举类实现IEnum<Integer>
public enum StatusEnum implements IEnum<Integer> {
examined(0, "已审核"),
examining(1, "审核中"),
notPassExamining(2, "未通过审核");
Status(Integer value, String name) {
this.value = value;
this.name = name;
}
private final Integer value;
private final String name;
@Override
public Integer getValue() {
return null;
}
public String getName() {
return name;
};
}
- properties文件里添加配置,定义扫描枚举类的包路径
mybatis-plus.type-enums-package=com.flower.enmus
- 修改实体类字段,本来是Integer类型,改成创建的枚举类名称
private StatusEnum status;
接下里就可以使用了,做数据库操作的时候,只需要StatusEnum .examined而不需要再写getValue()就可以直接使用了,而且在查询操作的时候会直接返回枚举类里定义的“name”值,而不会再返回0,1,2这样的值了。