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

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

相关推荐
心之语歌1 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
华仔啊2 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang2 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
Ray Liang4 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Java水解4 小时前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
SimonKing8 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean8 小时前
Jackson View Extension Spring Boot Starter
java·后端
Seven979 小时前
剑指offer-79、最⻓不含重复字符的⼦字符串
java
皮皮林55119 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河19 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化