@EnumValue注解详细介绍
-
功能概述:
@EnumValue
注解标记在枚举类型的字段上,表示该字段是枚举值在数据库中存储的实际值。这对于枚举的持久化是关键,确保枚举在数据库中的表示与Java枚举类的一致性。
-
主要用途:
- 字段指定:指定枚举类中哪个字段将用于数据库存储。例如,如果一个枚举包含多个字段(如代码和描述),你可以使用
@EnumValue
指定哪个字段代表实际的存储值。 - 数据转换:帮助MybatisPlus自动处理枚举与数据库存储值之间的转换,简化持久化逻辑。
- 字段指定:指定枚举类中哪个字段将用于数据库存储。例如,如果一个枚举包含多个字段(如代码和描述),你可以使用
-
应用场景:
- 当数据库中的某个字段需要存储枚举类型的值(如状态码、类型标识符)时,使用
@EnumValue
来明确该字段。 - 使枚举值与数据库中的实际存储值相对应,有助于代码的清晰和一致性。
- 当数据库中的某个字段需要存储枚举类型的值(如状态码、类型标识符)时,使用
-
示例代码及其解读:
import com.baomidou.mybatisplus.annotation.EnumValue;public enum Status {@EnumValueACTIVE(1, "Active"),INACTIVE(0, "Inactive");private final int code;private final String description;Status(int code, String description) {this.code = code;this.description = description;}public int getCode() {return code;}public String getDescription() {return description;}public static Status fromCode(int code) {for (Status status : values()) {if (status.code == code) {return status;}}throw new IllegalArgumentException("Unknown code: " + code);}
}
-
详细解释:
- 字段声明:
code
字段上使用了@EnumValue
注解,指示该字段是用于数据库存储的实际值。 - 构造函数:枚举的构造函数接收
code
和description
,分别用于数据库存储值和描述。 fromCode
方法:根据存储的code
值查找对应的枚举实例,简化从数据库值到枚举对象的转换。
- 字段声明:
-
MybatisPlus配置:
- MybatisPlus会在映射时自动识别
@EnumValue
注解,并将枚举的存储字段用于数据库操作,而不是枚举名称。
- MybatisPlus会在映射时自动识别
配置实体类
假设我们有一个名为 User
的实体类,其中一个字段使用了 Status
枚举类型。
实体类示例
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;@Data
@TableName("user") // 指定数据库表名
public class User extends Model<User> {@TableId // 指定主键字段private Long id;@TableField("username")private String username;@TableField("status")private Status status; // 使用枚举类型字段// 其他字段和方法...
}
配置说明:
-
@TableName
:- 用于指定数据库中的表名。这个注解是可选的,如果实体类名与表名相同,可以省略。
-
@TableId
:- 标记主键字段。可以指定主键策略(如自增、UUID等),但这在使用
@EnumValue
时并不直接相关。
- 标记主键字段。可以指定主键策略(如自增、UUID等),但这在使用
-
@TableField
:- 用于指定数据库表中的字段名。默认情况下,字段名与数据库列名相同,但你可以通过这个注解来显式指定。
-
Status status
:- 这是枚举类型字段。MyBatis-Plus 会根据
@EnumValue
注解来处理这个字段的数据库存储。
- 这是枚举类型字段。MyBatis-Plus 会根据
使用@EnumValue
注解能有效管理枚举在数据库中的持久化,使得枚举类型的存储和读取更加一致和清晰。