Java与MySQL中的枚举(Enum)

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

🌟 核心思想

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

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


1. MySQL 的 ENUM 类型

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

  • 示例:

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

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

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


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 + @EnumValueIEnum<String> ✅ 清晰直观
数字(如 1 表示男) enum + @EnumValueIEnum<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-启用 了!用枚举更安全、更易读。


✅ 总结建议

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

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

相关推荐
devilnumber5 小时前
Java 递归算法 详解 + 核心要点 + 实战运用 + 避坑指南
java·开发语言·算法
asdfg12589636 小时前
JavaBean是什么?怎么理解?有什么用途?
java·开发语言
北顾笙9806 小时前
MySQL-day2
数据库·mysql
摇滚侠8 小时前
SpringMVC 入门到实战 文件上传 75-77
java·后端·spring·maven·intellij-idea
程序猿乐锅8 小时前
【MySQL | 第八篇】MySQL 视图
数据库·mysql
GIS数据转换器8 小时前
城市排水生命线安全运行监测平台深度解析
java·运维·人工智能·python·安全·数据挖掘·无人机
华如锦9 小时前
面了很多 Java转AI Agent方向,一些面试题总结
java·开发语言·人工智能·python·ai
睡不醒男孩0308239 小时前
CLup 6.x 版本中针对StarRocks 存算一体集群的完整操作手册
java·服务器·网络·clup
程序员黑豆9 小时前
Java中怎么实现字符串拼接呢【AI全栈开发】
java