mybatisplus Enum枚举,@JsonValue / @JsonCreator简单使用
文章目录前言一、Enum定义1.完整代码2.分段解析1.状态定义2.状态内部变量定义3.构造函数4.重写getValue5.fromCodetips二、业务使用完整业务函数fromCode() 使用getValue()使用序列化和反序列化总结前言Enum枚举类型安全、自带描述、支持 Mybatis 自动持久化、规范是正式业务的首选本文简单介绍了mybatisplus中Enum的使用详细代码在代码仓库如果只关注Enum使用看common/OrderStatus.java(枚举定义核心类)dto/UpdateOrderStatusRequest.java前端参数传递service/OrderService.java订单业务类看里面的updateOrderStatus函数一、Enum定义1.完整代码packagecom.example.restaurantai.common;importcom.baomidou.mybatisplus.annotation.IEnum;importcom.fasterxml.jackson.annotation.JsonCreator;importcom.fasterxml.jackson.annotation.JsonValue;importlombok.Getter;/** * 序列化 就是把内存里的 Java 对象翻译成能传输/存储的格式比如 JSON 字符串。 * * 反序列化 就是反过来把 JSON 字符串翻译回 Java 对象。 */GetterpublicenumOrderStatusimplementsIEnumInteger{//定义枚举PENDING(1,待处理),PAID(2,已支付),CANCELLED(3,已取消),COMPLETED(4,已完成);//定义枚举内部变量privatefinalIntegercode;privatefinalStringdesc;//构造函数OrderStatus(Integercode,Stringdesc){this.codecode;this.descdesc;}//重写getValue方法OverrideJsonValue//序列化java-json 输出数字1234 装箱 后端 - 前端publicIntegergetValue(){returnthis.code;}JsonCreator//反序列化 json-java 如2-paid 数字到枚举 拆箱 前端-后端publicstaticOrderStatusfromCode(Integercode){for(OrderStatusstatus:values()){if(status.code.equals(code)){returnstatus;}}thrownewIllegalArgumentException(未知订单状态码: code);}}2.分段解析1.状态定义//定义枚举PENDING(1,待处理),PAID(2,已支付),CANCELLED(3,已取消),COMPLETED(4,已完成);你需要多少状态就在这里定义多少个变量2.状态内部变量定义//定义枚举内部变量privatefinalIntegercode;privatefinalStringdesc;这里定义状态内部需要的东西一般一个数字做持久化一个字符串用来展示在前端就够了3.构造函数//构造函数OrderStatus(Integercode,Stringdesc){this.codecode;this.descdesc;}4.重写getValue//重写getValue方法OverrideJsonValuepublicIntegergetValue(){returnthis.code;}mybatisplus要求使用了IEnum就必须重写其中的getValue方法其实就是根据枚举变量输出它代表的数字方便传输。常用使用方式如下写入数据库时自动调用伪代码表示如下// Service 代码orderInfo.setStatus(OrderStatus.PAID);orderInfoMapper.updateById(orderInfo);// MyBatis-Plus 内部流程// OrderStatus.PAID ──调用 getValue()──▶ Integer 2 ──写入──▶ order_info.status 2序列化加上JsonValue注解后意思是“把我序列化成 JSON 时别输出整个对象只输出 getValue() 的返回值”。也是spring自动调用// Controller 返回 OrderVOSpring 自动序列化// OrderVO.status OrderStatus.PAID ──调用 getValue()──▶ JSON: { status: 2 }5.fromCodeJsonCreator//反序列化 json-java 如2-paid 数字到枚举 拆箱 前端-后端publicstaticOrderStatusfromCode(Integercode){for(OrderStatusstatus:values()){if(status.code.equals(code)){returnstatus;}}thrownewIllegalArgumentException(未知订单状态码: code);}fromCode方法作用一句话总结为把数字转化为枚举类型。常见用法如下读数据库记录时MyBatis-Plus 从数据库读取时自动调用把数字转化为枚举// order_info 表 status 字段值为 2// MyBatis-Plus 内部流程// 数据库值 2 ──发现实体字段是 OrderStatus 类型──▶// 遍历 values() 逐个比对 getValue() → 匹配 PAID → OrderStatus.PAID// 注MyBatis-Plus 实际走的是 IEnum 接口 反射// 不直接调 fromCode()但逻辑等价反序列化加上JsonCreator注解后前端传 JSON 时自动调用数字-枚举// 前端 PUT /api/orders/1/status Body: { status: 2 }// Spring Jackson 内部流程// 1. 解析 JSON拿到 status 的值是整数 2// 2. 发现目标字段类型是 OrderStatus整数不匹配// 3. 查找 OrderStatus 上有 JsonCreator 标记的静态方法// 4. 调用 OrderStatus.fromCode(2) → 返回 OrderStatus.PAID// 5. request.setStatus(OrderStatus.PAID)tips对于getValue和fromCode简单来说就是出去用 getValue 进来用 fromCode方法方向谁调做什么getValue()枚举 → 数字MyBatis-Plus 写入 / Jackson 序列化 / 手动调用把 PAID 变成 2fromCode()数字 → 枚举Jackson 反序列化 / 手动调用把 2 变成 PAID二、业务使用以简单订单业务流转为例完整业务函数/** * 订单状态流转 * PENDING → PAID * PENDING → CANCELLED * PAID → COMPLETED */publicbooleanupdateOrderStatus(Longid,OrderStatusstatus){OrderInfoorderInfoorderInfoMapper.selectById(id);if(orderInfonull){thrownewBusinessException(订单号不存在);}OrderStatusnoworderInfo.getStatus();if(nowOrderStatus.PENDINGstatusOrderStatus.PAID){orderInfo.setStatus(OrderStatus.PAID);}elseif(nowOrderStatus.PENDINGstatusOrderStatus.CANCELLED){orderInfo.setStatus(OrderStatus.CANCELLED);}elseif(nowOrderStatus.PAIDstatusOrderStatus.COMPLETED){orderInfo.setStatus(OrderStatus.COMPLETED);}else{thrownewBusinessException(订单状态流转不合理);}returnorderInfoMapper.updateById(orderInfo)0;}fromCode() 使用查询隐式调用自动完成从2-PAID的转换OrderInfoorderInfoorderInfoMapper.selectById(id);// ← 从数据库读出 status2OrderStatusnoworderInfo.getStatus();// ← 已经是 OrderStatus.PAIDgetValue()使用更新时隐式调用PAID-2orderInfo.setStatus(OrderStatus.PAID);// 内存中是枚举对象orderInfoMapper.updateById(orderInfo);// ← 这里 MyBatis-Plus 内部调用 getValue()序列化和反序列化对于序列化和反序列化的调用在controller里面接收前端数据反序列化2-PAID返回VO序列化PAID-2总结业务代码全是 OrderStatus 枚举直接比较和赋值看起来很干净——这正是 JsonValue / JsonCreator / IEnum 组合的价值 把序列化/反序列化的脏活藏在底层业务层只和枚举打交道 。

相关新闻

大规模感知模型:多模态情绪识别与动态反馈系统解析

大规模感知模型:多模态情绪识别与动态反馈系统解析

1. 大规模感知模型的核心机制解析大规模感知模型作为当前AI领域的前沿技术,其核心在于构建多模态情绪识别与动态反馈系统。这种模型通过整合文本语义分析、面部微表情识别、语音情感计算等多维度感知能力,实现对用户情绪状态的精准捕捉和量化评估。1.1 情…

2026/7/23 21:38:00 阅读更多 →
【剪映AI配音实战指南】:20年音视频专家亲授,3步搞定专业级AI配音(附避坑清单)

【剪映AI配音实战指南】:20年音视频专家亲授,3步搞定专业级AI配音(附避坑清单)

更多请点击: https://intelliparadigm.com 第一章:剪映AI配音的核心原理与技术演进 剪映AI配音并非简单的语音合成(TTS)工具,而是融合了端到端深度学习、音色克隆、韵律建模与上下文感知语音生成的多模态语音系统。其…

2026/7/23 21:37:00 阅读更多 →
AI论文写作工具评测与学术诚信实践指南

AI论文写作工具评测与学术诚信实践指南

1. AI论文写作工具现状与选择逻辑学术写作正经历着从传统人工创作向智能辅助的转型期。当前市面上的AI论文工具主要分为三大技术流派:基于Transformer架构的通用大语言模型(如GPT系列)、针对学术领域优化的专业模型(如SciBERT&…

2026/7/23 21:37:00 阅读更多 →

最新新闻

2026中文论文工具排行榜[特殊字符]7款主流平台全维度横评|查重/降重/AI写作/性价比实测

2026中文论文工具排行榜[特殊字符]7款主流平台全维度横评|查重/降重/AI写作/性价比实测

查重免费是套路还是真福利? 双检测时代(重复率AIGC)哪款工具最稳? 开题/写作/排版/答辩一站式工具怎么选不踩坑? 2026最新实测榜单出炉✅学生党高性价比闭眼入 关键词:PaperXie、论文工具排行、中文论文…

2026/7/23 21:43:02 阅读更多 →
Moneta亿汇:流程清晰度与长期一致性如何影响体验,给出一套路径

Moneta亿汇:流程清晰度与长期一致性如何影响体验,给出一套路径

外汇市场信息更新频繁,平台口碑的形成更依赖长期一致性:入口是否好找、说明是否前后一致、提示是否稳定出现。围绕Moneta亿汇,下面从稳定体验与信息呈现等角度做一次正面观察。外汇相关平台的价值,体现在长期一致性与信息呈现的细…

2026/7/23 21:43:02 阅读更多 →
【关注可白嫖源码】--课程设计--毕业设计--springboot高校选课系统[编号:project82776] (案件分析)

【关注可白嫖源码】--课程设计--毕业设计--springboot高校选课系统[编号:project82776] (案件分析)

本文仅展示核心实现逻辑与部分代码片段,完整项目源码、配套文档、数据库脚本内容较多,篇幅有限无法全部放出。 有需要完整资源的同学,可以在评论区留言【资料或领源码】,我会一 一回复站内私信,发送完整文件 摘 要 高…

2026/7/23 21:43:02 阅读更多 →
中小企业数据备份,你需要知道的真相

中小企业数据备份,你需要知道的真相

今天我们来聊聊一个听起来有点“土”,但一旦出事足以让企业“一夜回到解放前”的话题:数据备份。很多老板和管理者听到“备份”二字,第一反应是:“哦,买几个硬盘,或者用个网盘,定期拷一下不就完…

2026/7/23 21:43:02 阅读更多 →
【关注可白嫖源码】--课程设计--毕业设计--springboot宠物寄养服务预约与监管系统[编号:project82684](案件分析)

【关注可白嫖源码】--课程设计--毕业设计--springboot宠物寄养服务预约与监管系统[编号:project82684](案件分析)

本文仅展示核心实现逻辑与部分代码片段,完整项目源码、配套文档、数据库脚本内容较多,篇幅有限无法全部放出。 有需要完整资源的同学,可以在评论区留言【资料或领源码】,我会一 一回复站内私信,发送完整文件 目 录 摘…

2026/7/23 21:43:02 阅读更多 →
地理探测器Geodetector_Arcgis Pro 下载学习

地理探测器Geodetector_Arcgis Pro 下载学习

地理探测器Geodetector 工具下载 官网http://www.geodetector.cn/Download.html解压下载的压缩包 直接打开Arcgis Pro参考解压文件中的pdf文件工具使用

2026/7/23 21:42:02 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻