如何在Java中将数据库查询结果转换为枚举类型
前言
在开发过程中,我们经常需要将从数据库获取的字符串或数字转换为更具语义的枚举类型。这不仅可以提高代码的可读性,还可以确保类型安全。这时候我们从数据库查出来的值如何通过枚举转换返回?
1. 构建枚举类型
首先,我们需要定义一个枚举类型来存储业务相关的常量。这些常量通常会包含一个描述性的字符串和一个可以与数据库中存储的值相匹配的标识符。
示例枚举类型:
public enum StatusEnum {ACTIVE(1, "Active"),INACTIVE(2, "Inactive"),DELETED(3, "Deleted");private Integer value;private String description;StatusEnum(Integer value, String description) {this.value = value;this.description = description;}public Integer getValue() {return value;}public String getDescription() {return description;}public static String getDescriptionByValue(Integer value) {for (StatusEnum status : StatusEnum.values()) {if (status.getValue().equals(value)) {return status.getDescription();}}return null; // 或者抛出异常,根据需求而定}
}
2. 创建实体类
接下来,创建一个实体类(VO),该类用于展示数据,并包含一个方法用于将数据库查询结果转换为枚举类型。
示例实体类:
import io.swagger.annotations.ApiModelProperty;
import org.springframework.format.annotation.DateTimeFormat;import java.util.Date;public class DataStatusVO {@ApiModelProperty("序列号")private String serialNumber;@ApiModelProperty("状态")private String status;@ApiModelProperty("日期")@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date date;public void setStatus(String status) {this.status = StatusEnum.getDescriptionByValue(Integer.parseInt(status));}// Getters and Setters
}
3. 使用实体类
当从数据库查询到数据后,可以通过调用setStatus方法将字符串类型的status转换为枚举类型中的描述。
示例使用:
public class DataService {public DataStatusVO getDataFromDB() {// 假设从数据库获取的数据如下String serialNumber = "SN12345";String status = "1"; // 数据库中存储的状态标识符Date date = new Date();DataStatusVO dataStatusVO = new DataStatusVO();dataStatusVO.setSerialNumber(serialNumber);dataStatusVO.setStatus(status); // 这里会自动转换为"Active"dataStatusVO.setDate(date);return dataStatusVO;}
}
注意事项
- 当数据库中的值与枚举中的值不匹配时,
getDescriptionByValue方法可能会返回null。因此,在调用setStatus方法之前,最好进行适当的错误处理。 - 如果枚举值和数据库值之间存在多对一的关系,可以在枚举中添加额外逻辑来处理这种情况。
- 考虑使用异常处理机制来替代返回
null,以避免在后续代码中出现空指针异常。
相关文章:
如何在Java中将数据库查询结果转换为枚举类型
前言 在开发过程中,我们经常需要将从数据库获取的字符串或数字转换为更具语义的枚举类型。这不仅可以提高代码的可读性,还可以确保类型安全。这时候我们从数据库查出来的值如何通过枚举转换返回? 1. 构建枚举类型 首先,我们需要…...
秋招突击——8、20——知识补充——Java容器
文章目录 引言正文总览ArrayListLinkedListQueue & Stack & ArrayDequePriorityQueueHashSet & HashMapLinkedHashSet & LinkedHashMapTreeSet & TreeMap 面…...
IOS 06 OC调用Swift第三方框架
前面文章05讲的是在OC项目中,调用Swift代码,而在真实开发过程中,在OC项目中调用Swift第三方框架场景用的是非常多的,所以我们也了解在OC项目如何使用Swift写的三方框架。 实现流程: 1、OCUseSwiftTest;在…...
SAP和致远OA系统集成案例
一、项目介绍 重庆某控股(集团)有限公司是一家集合汽柴油动力及终端、摩托车、储能电源、汽车零部件、金融服务等产业的多元化集团公司,业务遍布全球80多个国家及地区,2021年营业收入达80亿元。 为推动集团信息化、数字化转型…...
19 OptionMenu 组件
OptionMenu 组件使用指南 Tkinter 的 OptionMenu 组件是一个下拉选择框,允许用户从一组预定义的选项中选择一个。它通常用于提供用户一个有限的选项集合来选择。以下是对 OptionMenu 组件的详细说明和一个使用案例。 OptionMenu 组件属性 variable: 与 OptionMen…...
【C语言】字符函数与字符串函数(上)
字符函数与字符串函数(上) 文章目录 字符函数与字符串函数(上)1.字符分类函数2.字符转换函数3.strlen的使用和模拟实现3.1使用示例:3.2模拟实现 4.strcpy的使用和模拟实现4.1使用示例:4.2模拟实现 5.strcat的使用和模拟…...
机器学习系列—深入探索弗里德曼检验:非参数统计分析的利器
🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…...
【ubutnu18.04】k8s 部署4: worker节点配置1.31.0和containerd 1.7.20
上一篇:【ubutnu24.04】k8s部署3:重新安装1.31.0并init成功 worker 节点之一是ubuntu18.04主要参考 How Install Kubernetes on Ubuntu 24.04 (Step-by-Step Guide) 重点参考 ubuntu24.04 作为master反复配置kubelet root@PerfSvr:/home/zhangbin/perfwork/k8sadmin# sudo kub…...
android kotlin集成WorkManager实现定时获取数据
在Android中使用Kotlin集成WorkManager来实现定时获取数据是一个很常见的需求。WorkManager可以帮助你在设备处于闲置或应用被关闭时执行后台任务,特别适用于需要在特定时间间隔内重复执行的任务。以下是实现步骤: 1. 添加依赖项 首先,在你…...
BvSP_ Broad-view Soft Prompting for Few-Shot Aspect Sentiment Quad Prediction
BvSP: Broad-view Soft Prompting for Few-Shot Aspect Sentiment Quad Prediction 英文题目BvSP: Broad-view Soft Prompting for Few-Shot Aspect Sentiment Quad Prediction中文题目BvSP:面向少样本方面情感四元预测的广视角软提示论文地址aclanthology.org/202…...
React+Vis.js(05):vis.js的节点的点击事件
文章目录 需求实现思路抽屉实现完整代码需求 双击节点,弹出右侧的“抽屉”,显示节点的详细信息 实现思路 vis.network提供了一个doubleClick事件,代码如下: network.on(doubleClick, function (properties) {// console.log(nodes);let id = properties...
今日(2024 年 8 月 19 日)科技新闻
科大讯飞推出星火极速超拟人交互:8 月 19 日,科大讯飞宣布星火语音大模型更新,正式推出星火极速超拟人交互,并将其能力落地在讯飞星火 APP “小星畅聊” 功能中。该交互响应速度更快,能感知用户情绪变化并共情回应&…...
Python 虚拟环境
为什么要创建虚拟环境 创建 Python 虚拟环境的主要目的是为了解决依赖管理的问题,特别是在开发多个项目或部署应用程序时,虚拟环境具有以下几个优势: 依赖隔离: 不同的项目可能需要不同版本的 Python 解释器和库。通过创建虚拟环…...
Redis RDB三两事
rdb:将数据库的快照以二进制格式保存在文件中,redis重启后直接加载数据。可以通过save和bgsave命令生成rdb。当然我们可以在生成rdb文件时指定规则,例如 save 60 1000 如果60秒内不少于1000个key发生了改动,则生成一个新的rdb文件…...
分布式高可用架构设计
一、限流 1、单机限流 如图,应用C的资源c/x被上游的应用A和应用C并发访问,应用C的系统能力支持c/x资源最高5000/qps的访问量;为了不让高并发流量或尖峰流量压垮应用C,可以针对应用C的资源c/x做限流;比如设置限流4500…...
GATK SampleList接口介绍
在 GATK 中,SampleList 是一个接口,用于表示一个样本列表。这些样本通常是在基因组分析过程中被处理的不同生物样本。SampleList 接口提供了访问这些样本的一些基本方法,通常用于多样本分析任务,比如变异检测或基因组重测序。 SampleList 接口的方法 SampleList 接口定义…...
00后是真卷不过,工作没两年,跳槽到我们公司起薪20K都快接近我了
在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&…...
树莓派Pico C/C++ 开发环境搭建(一键完成版)
树莓派Pico C/C 开发环境搭建(一键完成版) 因为之前使用过MicroPython开发过树莓派Pico,总觉得用起来怪怪的。正好最近树莓怕发布了新一代的MCU——RP2350,之前的RP2040在各个平台都有所降价,因此,买了几块。同时因为之前是玩stm…...
【计算机组成原理】二、数据的表示和运算:1.数值与编码(十进制二进制转换、BCD码、ASCII码、汉字编码、奇偶校验码、循环冗余检测CRC、海明码)
二、数据的表示和运算 文章目录 二、数据的表示和运算1.数值与编码1.1数据存储和排列❗1.2十进制转换1.2.1整数1.2.2小数 1.3二进制转换1.3.1 B->O1.3.2 B->H 1.4真值&机器数1.5 BCD码1.6 ASCII码1.7汉字与GBK1.8 UTF1.9检错码1.9.1奇偶校验码1.9.2循环冗余检测CRC1.…...
汇编语言中的艺术:数据压缩与解压缩技术
标题:汇编语言中的艺术:数据压缩与解压缩技术 数据压缩是计算机科学中的一项基本技术,它通过减少数据的冗余来降低存储或传输所需的空间。在低级语言如汇编语言中实现数据压缩和解压缩,不仅是一种技术挑战,也是对硬件…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
