MybatisPlus中@EnumValue注解使用及应用场景

 更新时间:2025年10月23日 09:53:17   作者:小猿、  
@EnumValue注解标记在枚举类型的字段上,表示该字段是枚举值在数据库中存储的实际值,这对于枚举的持久化是关键,确保枚举在数据库中的表示与Java枚举类的一致性,下面就来详细的介绍一下@EnumValue注解如何使用,感兴趣的可以了解一下

@EnumValue注解详细介绍

功能概述

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

主要用途

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

应用场景

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

示例代码及其解读

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);
    }
}

详细解释

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

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<User> {

    @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注解能有效管理枚举在数据库中的持久化,使得枚举类型的存储和读取更加一致和清晰。

到此这篇关于MybatisPlus中@EnumValue注解使用及应用场景的文章就介绍到这了,更多相关MybatisPlus @EnumValue注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • win10和win7下java开发环境配置教程

    win10和win7下java开发环境配置教程

    这篇文章主要为大家详细介绍了win7下Java开发环境配置教程,win10下Java开发环境配置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • java判断字符串中是否包含中文并过滤中文

    java判断字符串中是否包含中文并过滤中文

    这篇文章主要为大家详细介绍了java判断字符串中是否包含中文,并过滤掉中文,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • 字符编码的处理和BeanUtils组件使用详解

    字符编码的处理和BeanUtils组件使用详解

    这篇文章主要为大家介绍了字符编码的处理和BeanUtils组件的使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Spring Boot 启动注解过程分析

    Spring Boot 启动注解过程分析

    这篇文章主要为大家介绍了Spring Boot 启动注解过程示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Java 创建动态类和查看方法列表信息的实例

    Java 创建动态类和查看方法列表信息的实例

    这篇文章主要介绍了 Java 创建动态类和查看方法列表信息的实例的相关资料,需要的朋友可以参考下
    2017-06-06
  • 浅谈一下单体架构的缺点是什么

    浅谈一下单体架构的缺点是什么

    这篇文章主要介绍了单体架构的缺点是什么,通常我们所使用的传统单体应用架构都是模块化的设计逻辑,程序在编写完成后会被打包并部署为一个具体的应用,而应用的格式则依赖于相应的应用语言和框架,需要的朋友可以参考下
    2023-04-04
  • Java实现简单字符生成器代码例子

    Java实现简单字符生成器代码例子

    这篇文章主要介绍了Java实现简单字符生成器代码例子,本文直接给出实现代码,需要的朋友可以参考下
    2015-06-06
  • Maven依赖冲突问题及解决过程

    Maven依赖冲突问题及解决过程

    文章主要讨论Maven依赖冲突问题,及提供解决方法,首先描述了依赖冲突现象的nd导致类NoClassDefFoundError的情况;然后介绍了查找冲突包的方法,最后总结了Maven依赖管理的几种策略,包括依赖调解、依赖排除和依赖范围控制;强调了合理配置POM文件的重要性
    2026-04-04
  • Java中-Xms和-Xmx参数的使用与默认内存设置

    Java中-Xms和-Xmx参数的使用与默认内存设置

    在 Java 程序运行时,内存的管理是影响程序性能的关键因素之一,Java 程序使用的内存主要由两部分组成:堆内存和栈内存,Java 提供了多个参数来控制堆内存的大小,其中最常用的参数是 -Xms 和 -Xmx,本文将详细介绍这些参数,需要的朋友可以参考下
    2024-11-11
  • Java阻塞队列BlockingQueue基础与使用

    Java阻塞队列BlockingQueue基础与使用

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下
    2023-01-01

最新评论