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

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

相关推荐
深藏bIue2 小时前
linux服务器mysql目录下的binlog文件删除
linux·服务器·mysql
xxxxxxllllllshi2 小时前
【LeetCode Hot100----14-贪心算法(01-05),包含多种方法,详细思路与代码,让你一篇文章看懂所有!】
java·数据结构·算法·leetcode·贪心算法
q***44812 小时前
mysql配置环境变量——(‘mysql‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件解决办法)
数据库·mysql·adb
pengzhuofan2 小时前
Sentinel 服务保护
java·微服务·sentinel
6***37942 小时前
Java安全
java·开发语言·安全
Zero-Talent2 小时前
MySQL初级
数据库·mysql·oracle
豐儀麟阁贵2 小时前
8.1 异常概述
java·开发语言
qq_12498707533 小时前
基于springboot的疾病预防系统的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·毕业设计
麦烤楽鸡翅3 小时前
简单迭代法求单根的近似值
java·c++·python·数据分析·c·数值分析