当前位置: 首页 > 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使用。

相关文章:

  • 基于CNN的掩码自编码器微调用于分类任务
  • JS遍历数组和对象的常用方法有哪些?
  • 千益畅行,旅游卡真相,成本与赋能潜力
  • CSS打印设置页眉页脚
  • #QT(QCharts绘制曲线)
  • Dify vs Langchain:AI应用开发的全面分析
  • abstract 的 method 是否可同时是 static,是否可同时是 native,是否可同时是 synchronized?
  • SpringBoot快速入门-上
  • 用户需求分析揭秘:最佳实践与策略
  • 计算机网络——传输层重要协议(TCP、UDP)
  • ABBYY 15软件下载-ABBYY FineReader 15中文版下载附加详细安装步骤
  • 鸿蒙实现自定义Tabbar样式,显示数字红点提示
  • 什么是LLM?看这一篇就够了!
  • k8s 1.28 搭建rabbitmq集群
  • 充电学习—2、开关电源基本原理
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 【知识碎片】第三方登录弹窗效果
  • Apache Spark Streaming 使用实例
  • ES6核心特性
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • LintCode 31. partitionArray 数组划分
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • PHP CLI应用的调试原理
  • QQ浏览器x5内核的兼容性问题
  • React Transition Group -- Transition 组件
  • React-redux的原理以及使用
  • vuex 笔记整理
  • 闭包,sync使用细节
  • 多线程事务回滚
  • 分类模型——Logistics Regression
  • 关于字符编码你应该知道的事情
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 前端js -- this指向总结。
  • 前端面试之CSS3新特性
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 在Unity中实现一个简单的消息管理器
  • 白色的风信子
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • $jQuery 重写Alert样式方法
  • (day18) leetcode 204.计数质数
  • (function(){})()的分步解析
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (笔试题)分解质因式
  • (二十四)Flask之flask-session组件
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (算法)前K大的和
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)80c52学习之旅-起始篇
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET CORE Aws S3 使用