手机网站解析地址,江苏省建筑网站,成都网站建设v,咨询公司名字在数据库中常用数字来代替字符串类型#xff0c;编写一个枚举映射类
当数据库的介质类型要存储数字#xff0c;前端可以任意传参#xff0c;通过枚举转换后端都会转成数字对应类型 import lombok.Getter;/*** p* 存档介质类型* /p** author Jyang* date 2…在数据库中常用数字来代替字符串类型编写一个枚举映射类
当数据库的介质类型要存储数字前端可以任意传参通过枚举转换后端都会转成数字对应类型
import lombok.Getter;/*** p* 存档介质类型* /p** author Jyang* date 2024/11/14*/
Getter
public enum ArchiveMediumTypeEnum implements DescriptiveEnum {PAPER(1, 纸质),ELECTRONIC(2, 电子);private final int code;private final String desc;ArchiveMediumTypeEnum(int code, String desc) {this.code code;this.desc desc;}Overridepublic int getCode() {return code;}Overridepublic String getDesc() {return desc;}
}
/*** p* 适用于数据库存储的描述性枚举* /p** author Jyang* date 2024/11/14*/public interface DescriptiveEnum {/*** 编码*/int getCode();/*** 描述*/String getDesc();
}import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;/*** p* 枚举转换* /p** author Jyang* date 2024/11/14*/public class DescriptiveEnumConverterT extends EnumT DescriptiveEnum {/*** keycode* value泛型枚举*/private final MapInteger, T codeToEnum new HashMap();/*** key描述信息* value泛型枚举*/private final MapString, T descToEnum new HashMap();/*** 使用Map存储作为单例模式*/private static final MapClass?, DescriptiveEnumConverter? CACHE new ConcurrentHashMap();public static T extends EnumT DescriptiveEnum DescriptiveEnumConverterT of(ClassT enumClass) {return (DescriptiveEnumConverterT) CACHE.computeIfAbsent(enumClass,(Class? k) - new DescriptiveEnumConverter(enumClass));}public DescriptiveEnumConverter(ClassT enumClass) {for (T enumConstant : enumClass.getEnumConstants()) {codeToEnum.put(enumConstant.getCode(), enumConstant);descToEnum.put(enumConstant.getDesc(), enumConstant);}}/*** 根据编码获取描述** param code 编码* return*/public String getDescByCode(Integer code) {return codeToEnum.get(code).getDesc();}/*** 根据描述获取编码** param desc 描述* return*/public Integer getCodeByDesc(String desc) {return descToEnum.get(desc).getCode();}/*** 统一返回编码** param codeOrDesc 编码或者描述* return 编码*/public Integer getCode(Object codeOrDesc) {return Optional.ofNullable(codeToEnum.get(codeOrDesc)).orElseGet(() - descToEnum.get(codeOrDesc)).getCode();}/*** 统一返回描述** param codeOrDesc 编码或者描述* return 描述*/public String getDesc(Object codeOrDesc) {return Optional.ofNullable(codeToEnum.get(codeOrDesc)).orElseGet(() - descToEnum.get(codeOrDesc)).getDesc();}/*** 根据编码获取枚举** param code 编码* return 枚举*/public T fromCode(Integer code) {return codeToEnum.get(code);}/*** 根据描述获取类型** param desc 描述* return 枚举*/public T fromDesc(String desc) {return descToEnum.get(desc);}/*** 根据枚举获取编码** param enumValue 枚举* return 编码*/public Integer toCode(T enumValue) {return Optional.ofNullable(enumValue).map(DescriptiveEnum::getCode).orElse(null);}/*** 根据枚举获取描述** param enumValue 枚举* return 描述*/public String toDesc(T enumValue) {return Optional.ofNullable(enumValue).map(DescriptiveEnum::getDesc).orElse(null);}
} /*** 使用方式* * param args*/public static void main(String[] args) {/*** 根据编码或者描述统一返回编码*/Integer code1 DescriptiveEnumConverter.of(ArchiveMediumTypeEnum.class).getCode(1);System.out.println(code1 code1);Integer code2 DescriptiveEnumConverter.of(ArchiveMediumTypeEnum.class).getCode(纸质);System.out.println(code2 code2);/*** 根据编码或者描述统一返回描述信息*/String desc1 DescriptiveEnumConverter.of(ArchiveMediumTypeEnum.class).getDesc(2);System.out.println(desc desc1);String desc2 DescriptiveEnumConverter.of(ArchiveMediumTypeEnum.class).getDesc(电子);System.out.println(desc desc2);/*** 根据枚举返回编码*/Integer toCode DescriptiveEnumConverter.of(ArchiveMediumTypeEnum.class).toCode(ArchiveMediumTypeEnum.PAPER);String toDesc DescriptiveEnumConverter.of(ArchiveMediumTypeEnum.class).toDesc(ArchiveMediumTypeEnum.ELECTRONIC);}