Java与MySQL中的枚举(Enum)笔记
🌟 核心思想
枚举 = 有限选项的"单选框"
比如:性别(男/女/未知)、状态(启用/禁用)、逻辑删除(正常/已删)。
1. MySQL 的 ENUM 类型
-
作用:限制字段只能取预定义的几个字符串值。
-
示例:
sqlCREATE TABLE user ( id BIGINT, status ENUM('ACTIVE', 'INACTIVE', 'PENDING') ); -
特点:
- 存的是字符串(如
'ACTIVE'),不是数字; - 插入非法值会报错;
- 修改选项需改表结构(不够灵活,慎用)。
- 存的是字符串(如
💡 很多项目不用
ENUM,而是用VARCHAR或TINYINT+ 应用层控制。
2. Java 的 enum 类型
-
作用:用类型安全的方式表示固定选项。
-
基础用法:
javapublic enum Status { ACTIVE, INACTIVE, PENDING; } -
带值的常用写法(推荐):
javapublic 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+ 注释:看似简单,实则埋雷; - 枚举不是过度设计,是专业写法。
写代码是写给人看的,不是只给机器跑的。------ 枚举让意图一目了然。