java开发

您所在的位置:网站首页 java枚举类型定义 java开发

java开发

2023-05-11 19:10| 来源: 网络整理| 查看: 265

项目牵扯到了jpa和mybatis,枚举映射的值类型有字符串,数值,自定义信息,所以统一了一下规则,方便开发,反正我觉得很好用

//举例 enum Weekday { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } 字符串可以使用 @Enumerated(EnumType.STRING) 这个是按照枚举的枚举值的名称进行存储 MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY 数值可以使用 @Enumerated(EnumType.ORDINAL) 这个是按照枚举的枚举值的次序进行存储 0,1,2,3,4,5,6 如果我想存储的时候SUNDAY代表的是0, 那么就要改变顺序,如果已经上线了,就可能带来很大的风险 复制代码

实战

//枚举类字段的使用 /** * 星期 1.星期一 2.星期二 3.星期三 4.星期四 5.星期五 6.星期六 7.星期日 */ @ApiModelProperty("星期 1.星期一 2.星期二 3.星期三 4.星期四 5.星期五 6.星期六 7.星期日") //mybatis-plus字段映射 ,@Result字段映射 @TableField(value = "weekday", typeHandler = Weekday.WeekdayConverter.class) //反序列化的场景是前端传值时可以自定义使用 @JsonDeserialize(using = Weekday.WeekdayJsonDeserializer.class) //序列化为枚举继承的泛型类型值, 例如:redis缓存,json相应数据等 @JsonSerialize(using = EnumConstant.EnumJsonSerializer.class) //jpa框架字段映射 @Convert(converter = Weekday.WeekdayConverter.class) //jpa字段映射信息 @Column(name = "weekday", columnDefinition = "tinyint NOT NULL DEFAULT 1 COMMENT '星期 1.星期一 2.星期二 3.星期三 4.星期四 5.星期五 6.星期六 7.星期日'") private Weekday weekday; 复制代码 //枚举类 public enum Weekday implements EnumConstant { //星期一 MONDAY(1, 1, "星期一", "悲催的周一"), //星期二 TUESDAY(2, 2, "星期二", "周二我爱摸鱼"), //星期三 WEDNESDAY(3, 3, "星期三", "调休去看电影"), //星期四 THURSDAY(4, 4, "星期四", "期待中度过"), //星期五 FRIDAY(5, 5, "星期五", "哼着欢快的小曲"), //星期六 SATURDAY(6, 6, "星期六", "加班吐血中"), //星期日, //注意这里的类型值是0 SUNDAY(0, 7, "星期日", "吸血鬼继续压榨"); Weekday(Integer typeValue, Integer value, String name, String showInfo) { this.typeValue = typeValue; this.value = value; this.name = name; this.showInfo = showInfo; } /** * 类型值,没想好怎么用,保留 */ private final Integer typeValue; /** * 枚举值 */ private final Integer value; /** * 枚举名称 */ private final String name; /** * 展示信息 */ private final String showInfo; /** * 获取默认值 * 如果需要就返回,不需要就不返回 * * @return 这里返回的默认的周一 */ @Override public Integer getDefaultValue() { return MONDAY.getValue(); } /** * 获取枚举值 * * @return 枚举值 */ @Override public Integer getValue() { return this.value; } /** * 获取枚举名称 * * @return 名称 */ @Override public String getName() { return this.name; } /** * 获取枚举展示信息 * 可以在导出报表的时候作为直接展示使用,或者是返回给前端直接使用 * 这个方法复写了父类 * * @return 展示信息 */ @Override public String getExportShowValue() { return this.showInfo; } /** * mybatis与jpa框架数据库枚举字段转换 * 如果没有使用到相应的框架, 可以把相应的继承或实现的代码删除 * 如果不使用jpa框架,@Converter可以不写 */ @Converter public static class WeekdayConverter extends AbstractEnumConverter { } /** * 自定义json反序列化 */ public static class WeekdayJsonDeserializer extends EnumJsonDeserializer { @Override public Weekday deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { ObjectCodec codec = p.getCodec(); String value = codec.readValue(p, String.class); Weekday[] enumConstants = Weekday.values(); for (Weekday enumConstant : enumConstants) { //这里使用显示信息反序列化枚举 //例如前端传值为"哼着欢快的小曲",则为星期五,枚举值为FRIDAY if (enumConstant.getExportShowValue().equals(value)) { return enumConstant; } } throw new IllegalArgumentException("没有找到值"); } } } 复制代码 //继承的枚举常量信息 public interface EnumConstant { /** * 获取默认值 * * @return */ default T getDefaultValue(){ return null; } /** * 获取枚举值 * * @return 枚举值 */ T getValue(); /** * 获取名称 * * @return 名称 */ String getName(); /** * 导出excel等的显示值 * * @return 显示值 */ default String getExportShowValue() { return getName(); } /** * 根据值获取枚举 * * @param value 值 * @return 枚举 */ default EnumConstant findByValue(T value) { Class


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3