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 + 注释:看似简单,实则埋雷;
  • 枚举不是过度设计,是专业写法

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

相关推荐
橘子131 天前
MySQL用户管理(十三)
数据库·mysql
Dxy12393102161 天前
MySQL如何加唯一索引
android·数据库·mysql
启山智软1 天前
【中大企业选择源码部署商城系统】
java·spring·商城开发
我真的是大笨蛋1 天前
深度解析InnoDB如何保障Buffer与磁盘数据一致性
java·数据库·sql·mysql·性能优化
怣501 天前
MySQL数据检索入门:从零开始学SELECT查询
数据库·mysql
怪兽源码1 天前
基于SpringBoot的选课调查系统
java·spring boot·后端·选课调查系统
恒悦sunsite1 天前
Redis之配置只读账号
java·redis·bootstrap
梦里小白龙1 天前
java 通过Minio上传文件
java·开发语言
人道领域1 天前
javaWeb从入门到进阶(SpringBoot事务管理及AOP)
java·数据库·mysql
sheji52611 天前
JSP基于信息安全的读书网站79f9s--程序+源码+数据库+调试部署+开发环境
java·开发语言·数据库·算法