Skip to content
广告❤️成为赞助商

自动映射枚举

MongoPlus提供了灵活的枚举映射,只需要对枚举进行声明,即可实现枚举的自动映射

未声明的枚举则使用枚举的name进行映射

java
public class User {
    private String name; // 名字
    private AgeEnum age; // 年龄
    private GradeEnum grade; // 年级
}

创建映射器,并注册成Bean

java
import com.mongoplus.annotation.comm.EnumValue;
import com.mongoplus.mapping.FieldInformation;
import com.mongoplus.strategy.mapping.MappingStrategy;
import com.mongoplus.toolkit.EnumUtil;

/**
 * 枚举映射策略
 *
 * @author anwen
 */
@SuppressWarnings({"rawtypes"})
@Component
public class EnumMappingStrategy implements MappingStrategy<Enum> {

    @Override
    public Object mapping(Enum fieldValue) throws IllegalAccessException {
        FieldInformation fieldInformation = EnumUtil.getFieldInformation(fieldValue);
        if (fieldInformation == null) {
            return fieldValue.name();
        }
        EnumValue enumValue = fieldInformation.getAnnotation(EnumValue.class);
        if (enumValue.valueStore()){
            return fieldInformation.getValue(fieldValue);
        }
        return fieldValue.name();
    }
}

枚举声明

枚举属性使用 @EnumValue 注解,指定枚举值在数据库中存储的实际值。支持枚举类中的任意字段,如序号或编码。

java

@Getter
@AllArgsConstructor
public enum GradeEnum {
    PRIMARY(1, "小学"),
    SECONDARY(2, "中学"),
    HIGH(3, "高中");

    @EnumValue // 标记数据库存的值是code
    private final int code;
    // 其他属性...
}

通过以上简单步骤,你可以优雅地在 MongoPlus 中使用枚举属性,并且能够方便地将枚举值序列化为前端所需的格式。