MybatisPlus中@EnumValue注解介绍、应用场景和示例代码

@EnumValue注解详细介绍

  1. 功能概述

    • @EnumValue注解标记在枚举类型的字段上,表示该字段是枚举值在数据库中存储的实际值。这对于枚举的持久化是关键,确保枚举在数据库中的表示与Java枚举类的一致性。
  2. 主要用途

    • 字段指定:指定枚举类中哪个字段将用于数据库存储。例如,如果一个枚举包含多个字段(如代码和描述),你可以使用@EnumValue指定哪个字段代表实际的存储值。
    • 数据转换:帮助MybatisPlus自动处理枚举与数据库存储值之间的转换,简化持久化逻辑。
  3. 应用场景

    • 当数据库中的某个字段需要存储枚举类型的值(如状态码、类型标识符)时,使用@EnumValue来明确该字段。
    • 使枚举值与数据库中的实际存储值相对应,有助于代码的清晰和一致性。
  4. 示例代码及其解读

import com.baomidou.mybatisplus.annotation.EnumValue;

public enum Status {
    @EnumValue
    ACTIVE(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);
    }
}
  1. 详细解释

    • 字段声明code字段上使用了@EnumValue注解,指示该字段是用于数据库存储的实际值。
    • 构造函数:枚举的构造函数接收codedescription,分别用于数据库存储值和描述。
    • fromCode方法:根据存储的code值查找对应的枚举实例,简化从数据库值到枚举对象的转换。
  2. MybatisPlus配置

    • MybatisPlus会在映射时自动识别@EnumValue注解,并将枚举的存储字段用于数据库操作,而不是枚举名称。

配置实体类

假设我们有一个名为 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 {

    @TableId // 指定主键字段
    private Long id;

    @TableField("username")
    private String username;

    @TableField("status")
    private Status status; // 使用枚举类型字段

    // 其他字段和方法...
}
配置说明
  1. @TableName

    • 用于指定数据库中的表名。这个注解是可选的,如果实体类名与表名相同,可以省略。
  2. @TableId

    • 标记主键字段。可以指定主键策略(如自增、UUID等),但这在使用 @EnumValue 时并不直接相关。
  3. @TableField

    • 用于指定数据库表中的字段名。默认情况下,字段名与数据库列名相同,但你可以通过这个注解来显式指定。
  4. Status status

    • 这是枚举类型字段。MyBatis-Plus 会根据 @EnumValue 注解来处理这个字段的数据库存储。

使用@EnumValue注解能有效管理枚举在数据库中的持久化,使得枚举类型的存储和读取更加一致和清晰。

你可能感兴趣的:(java,持久层框架技术栈,mybatis,java)