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

java枚举和mybaits-plus结合实现映射输出和存储

文章目录

  • 枚举
    • 简单枚举
    • 带构造函数的枚举
  • 结合mybatis-plus实现枚举映射存储
    • 配置
    • 使用
  • 参考学习文章

  • 需求,就是我们需求统一管理字段,比如我们规定a是开始 b是结束,那么在数据库存储的时候就可以存储单个字符

枚举

  • 我们先来了解下Java的枚举
  • Java的枚举我简单理解就是特殊的类,类所有的写法,枚举也可以有~

简单枚举

public enum enum1 {RED, GREEN, BLANK, YELLOW;//main函数为测试内容,你可以直接删除才是真正的枚举类public static void main(String[] args) {System.out.println(enum1.BLANK);//输出BLANK}
}

带构造函数的枚举

  • 就是可以存储多个数据啦
    • 需求就是我们希望这个枚举可以有多个信息,而不是变量名和值一样,比如我规定a代表code为200,message为"成功’这种
//你可以理解为带构造函数的存储的信息如下~
a -> {code:200,message:"成功",
}
public enum enum2 {//注意,这里不是构造函数名称,而是自定义的枚举名称,如SUCCESS,FAILSUCCESS(200,"成功"),//注意要逗号分隔,最后一个不添加逗号FAIL(500,"失败")//分号最好另起一行,隔断作用;//添加成员变量private int code;//代码private String message;//消息//添加构造函数enum2(int code,String message){this.code = code;this.message = message;}//添加Getter,当然你也可以使用lombokpublic int getCode(){return this.code;}public String getMessage(){return this.message;}//main函数为测试内容,你可以直接删除才是真正的枚举类public static void main(String[] args) {enum2 one = enum2.FAIL;System.out.println(one.getCode());//输出500System.out.println(one.getMessage());//输出失败}
}

结合mybatis-plus实现枚举映射存储

  • 就是数据库存储a,然后用户看到的是更复杂的数据
    • 比如数据库存储1 后面查询返回给用户的实际是"已开始"
  • 目前依赖如下,可以看到mybatis-plus为3.5.12

配置

  • 貌似3.5不需要配置什么枚举扫描类的包和handler了,只需要添加@EnumValue和@JsonValue就可以

使用

  • 创建枚举
    • 这里创建了枚举EnumTest3
@Getter
public enum EnumTest3 {END(-1,"中止"),STARTED(1,"已开始"),COMPLETE(2,"已结束"),PROCESS(3,"流程中");;@EnumValueprivate int code;//实际存入数据库的//@JsonValue记得添加,否则不会自动映射!@JsonValueprivate String status;//用户看到的EnumTest3(int code,String status){this.code = code;this.status = status;}
}
  • entity更换为枚举类型
    • entity就是数据库和实体类的对应
import com.example.demo_6.enums.EnumTest3;
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("enum_test")
public class EnumTest {@TableId(type = IdType.AUTO)private int id;private EnumTest3 status;//测试枚举字段
}
  • TestEnumReq类内容
package com.example.demo_6.Req;import com.example.demo_6.enums.EnumTest3;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class TestEnumReq {//用户传递过来的数据private EnumTest3 status;
}
  • controller测试
package com.example.demo_6.controller;import com.example.demo_6.Req.TestEnumReq;
import com.example.demo_6.entity.EnumTest;
import com.example.demo_6.enums.EnumTest1;
import com.example.demo_6.enums.EnumTest3;
import com.example.demo_6.mapper.EnumTestMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/enumTest")
public class TestEnumController {@AutowiredEnumTestMapper enumTestMapper;@PostMapping("/insert")//这个是测试前端传递的参数有没有正确存储到数据库//这样子前端可以传1也可以传递"已开始"//这样子前端传递 "已开始"就只会在数据库存储1 , "已结束"就只会在数据库存储2public int one(@RequestBody TestEnumReq enumReq) {EnumTest test1 = new EnumTest();test1.setStatus(enumReq.getStatus());return enumTestMapper.insert(test1);}@PostMapping("/list")//这个是测试返回给前端的数据有没有映射上去,比如数据库里面是1,返回给用户的"已开始"public List<EnumTest> list() {return enumTestMapper.selectList(null);}
}
  • 数据库内容

  • 调用**/enumTest/list**接口输出内容

参考学习文章

  • https://juejin.cn/post/7029211885534707725
  • https://baomidou.com/guides/auto-convert-enum/#%E6%96%B9%E5%BC%8F%E4%B8%80%E6%B3%A8%E8%A7%A3%E6%A0%87%E8%AE%B0
http://www.xdnf.cn/news/658243.html

相关文章:

  • VScode怎么运行一个c语言程序
  • ChatGPT与认知科学:人机协同的未来图景
  • STM32 IIC总线死锁问题总结
  • 洛谷——P3372 【模板】线段树 1
  • webpack吐环境分析
  • 为什么使用ollama运行的模型不用gpu也可以使用
  • [攻防世界] easyphp writeup
  • Graph Neural Network(GNN)
  • 如何通过全流量溯源分析系统实现高效的网络质量监控
  • JavaSE核心知识点04工具04-02(IDEA)
  • 关于(stream)流
  • MySQL的基础操作
  • 内网搭建NTS服务器
  • 网络安全之Web渗透加解密
  • 原子操作(Atomic Operations)在SOC中的应用场景
  • 【R语言编程绘图-函数篇】
  • Sparse VideoGen开源:完全无损,视频生成速度加速两倍,支持Wan 2.1、HunyuanVideo等
  • DAY12打卡 启发式算法
  • 基于yjs实现协同编辑页面
  • 学习黑客Metasploit 框架的原理
  • 端午假期 · 粽享欢乐
  • 开源Vue表单设计器 FcDesigner 组件提供的方法详解
  • 《1.1_4计算机网络的分类|精讲篇|附X-mind思维导图》
  • deepseek告诉您http与https有何区别?
  • CQF预备知识:一、微积分 -- 1.4.6 莱布尼茨法则详解
  • Mysql在SQL层面的优化
  • [Java实战]SpringBoot集成SNMP实现OID数据获取:原理、实践与测试(三十三)
  • GitLab 从 17.10 到 18.0.1 的升级指南
  • 动态规划-918.环形子数组的最大和-力扣(LeetCode)
  • SQL Driver