当前位置: 首页 > news >正文

实体类status属性使用枚举类型的步骤

1. 问题引出

当实体类的状态属性为Integer类型时,容易写错

在这里插入图片描述

在这里插入图片描述

2. 初步修改

把状态属性强制为某个类型,并且自定义一些可供选择的常量。

在这里插入图片描述

public class LessonStatus {public static final LessonStatus NOT_LEARNED = new LessonStatus(0,"未学习");public static final LessonStatus LEARNING = new LessonStatus(1,"学习中");public static final LessonStatus FINISHED = new LessonStatus(2,"已学完");public static final LessonStatus INVALID = new LessonStatus(3,"已失效");private int value;private String desc;private LessonStatus(int value, String desc){this.value=value;this.desc=desc;}
}

在java1.4过后,可以用enum类型代替以上写法

public enum LessonStatus {NOT_LEARNED(0,"未学习"),LEARNING(1,"学习中"),FINISHED(2,"已学完"),INVALID(3,"已失效");private int value;private String desc;LessonStatus(int value,String desc){this.value = value;this.desc = desc;}
}

使用该类型
在这里插入图片描述

3. @EnumValue

但是这样做,将数据插入表时会产生类型不匹配的问题。实体类为enum类型,表的列属性为tinyint类型。
在这里插入图片描述
因此,给需要注入值的字段加上@EnumValue注解,表示插入数据库时,实际上插入的是该字段而不是整个枚举对象。
在这里插入图片描述
再次测试,成功
在这里插入图片描述

4. 使用案例

@JsonValue:与@EnumValue相似,转换成json对象时,只序列化该注解下的字段
@JsonCreator:json反序列化,将该字段转换成一个object对象

@Getter
public enum LessonStatus implements BaseEnum {NOT_BEGIN(0, "未学习"),LEARNING(1, "学习中"),FINISHED(2, "已学完"),EXPIRED(3, "已过期"),;@JsonValue@EnumValueint value;String desc;LessonStatus(int value, String desc) {this.value = value;this.desc = desc;}@JsonCreator(mode = JsonCreator.Mode.DELEGATING)public static LessonStatus of(Integer value){if (value == null) {return null;}for (LessonStatus status : values()) {if (status.equalsValue(value)) {return status;}}return null;}
}
@Getter
public enum PlanStatus implements BaseEnum {NO_PLAN(0, "没有计划"),PLAN_RUNNING(1, "计划进行中"),;@JsonValue@EnumValueint value;String desc;PlanStatus(int value, String desc) {this.value = value;this.desc = desc;}@JsonCreator(mode = JsonCreator.Mode.DELEGATING)public static PlanStatus of(Integer value){if (value == null) {return null;}for (PlanStatus status : values()) {if (status.equalsValue(value)) {return status;}}return null;}
}

json序列化见下一篇博客@JsonValue和@JsonCreator使用。

http://www.lryc.cn/news/377006.html

相关文章:

  • pytorch基础【4】梯度计算、链式法则、梯度清零
  • mapreduce综合应用案例 — 招聘数据清洗
  • 发力采销,京东的“用户关系学”
  • 期望23K,go高级社招面试复盘
  • 电感(线圈)具有哪些基本特性
  • tkinter实现一个GUI界面-快速入手
  • Top10在线音频剪辑软件,你了解几款?(免费分享)
  • mysql报错:You can‘t specify target table ‘Person‘ for update in FROM clause
  • Python sorted()方法
  • 云上宝库:三大厂商对象存储安全性及差异性比较
  • 【计算机网络体系结构】计算机网络体系结构实验-www实验
  • Windows下MySQL数据库定期备份SQL文件与删除历史备份文件.bat脚本
  • electron基础使用
  • 9.华为交换机telnet远程管理配置aaa认证
  • xcode报错合集,你都遇到过哪些跳不过的坑
  • 六面体大米装袋机长期稳定运行原因分析
  • android的surface
  • Z世代职场价值观的重塑:从“班味”心态到个人成长的追求
  • 【Python】Python 2 测试网络连通性脚本
  • 瓦罗兰特教你怎么玩低价区+超适配低价区的免费加速器
  • Linux安装kvm虚拟机
  • @pytest.fixture与@pytest.mark.parametrize结合实现参数化
  • uniapp中unicloud接入支付宝订阅消息完整教程
  • PHP 标准建议psr
  • 第九届信也科技杯全球AI算法大赛——语音深度鉴伪识别参赛A榜 0.968961分
  • 【设计模式(三) 设计模式的分类 】
  • Linux进程概念(个人笔记)
  • 每天五分钟计算机视觉:如何在现有经典的卷积神经网络上进行微调
  • 10个典型的MySQL笔试题和面试题
  • AI大模型的TTS评测