Java与MySQL中的枚举(Enum)

Java与MySQL中的枚举(Enum)笔记

🌟 核心思想

枚举 = 有限选项的"单选框"

比如:性别(男/女/未知)、状态(启用/禁用)、逻辑删除(正常/已删)。


1. MySQL 的 ENUM 类型

  • 作用:限制字段只能取预定义的几个字符串值。

  • 示例:

    sql 复制代码
    CREATE TABLE user (
        id BIGINT,
        status ENUM('ACTIVE', 'INACTIVE', 'PENDING')
    );
  • 特点:

    • 存的是字符串(如 'ACTIVE'),不是数字;
    • 插入非法值会报错;
    • 修改选项需改表结构(不够灵活,慎用)。

💡 很多项目不用 ENUM,而是用 VARCHAR 或 TINYINT + 应用层控制。


2. Java 的 enum 类型

  • 作用:用类型安全的方式表示固定选项。

  • 基础用法:

    java 复制代码
    public enum Status {
        ACTIVE, INACTIVE, PENDING;
    }
  • 带值的常用写法(推荐):

    java 复制代码
    public enum Gender {
        MALE(1, "男"),
        FEMALE(2, "女"),
        UNKNOWN(0, "未知");
    
        private final int code;
        private final String desc;
    
        Gender(int code, String desc) {
            this.code = code;
            this.desc = desc;
        }
    
        public int getCode() { return code; }
    }
  • 优点:

    • 编译器检查,防止拼错;
    • 不能传非法值;
    • 可附加方法、描述、国际化等。

3. Java Enum + 数据库怎么配合?

数据库存什么 Java 用什么 推荐做法
字符串(如 'ACTIVE') enum + @EnumValue 或 IEnum<String> ✅ 清晰直观
数字(如 1 表示男) enum + @EnumValue 或 IEnum<Integer> ✅ 兼容性强

MyBatis-Plus 配置示例(存 int):

java 复制代码
public enum EnableStatus implements IEnum<Integer> {
    DISABLED(0),
    ENABLED(1);

    private final int value;
    EnableStatus(int value) { this.value = value; }
    @Override public Integer getValue() { return value; }
}

Entity 字段:

java 复制代码
private EnableStatus enabled; // 自动映射 0/1 ↔ 枚举

⚠️ 别再用 int status; // 0-停用,1-启用 了!用枚举更安全、更易读。


✅ 总结建议

  • 能用枚举的地方,就用枚举:性别、状态、开关、类型等有限选项;
  • 数据库可用 TINYINT 或 VARCHAR ,Java 用 enum 映射;
  • 避免用 int + 注释:看似简单,实则埋雷;
  • 枚举不是过度设计,是专业写法。

写代码是写给人看的,不是只给机器跑的。------ 枚举让意图一目了然。

相关推荐
别动我齐刘海7 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
牛战士coding7 小时前
MySQL 读写分离完整链路:主从复制、多数据源与 @DS 路由
数据库·mysql
code2cat9 小时前
Java进阶篇之AtomicLongFieldUpdater:把累计额度留在对象字段中
java·cas·并发编程
WeiXin_DZbishe9 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
我不会插花弄玉9 小时前
7.函数【由浅入深-MySQL】
android·数据库·mysql
泡茶喝茶写代码9 小时前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
wewowilling9 小时前
认识微服务
java·运维·微服务·springcloud
代码什么用9 小时前
Java Web 7-10
java·servlet
蜗牛互联网11 小时前
GPT-6 与 Intelligent UI:从回答到可审计操作的产品迁移
java·人工智能·后端