面试题:说说MybatisPlus枚举映射

面试题:说说MybatisPlus枚举映射

这是一道面试题,公司是大连飞创,这里总结一下。

首先题目是这样的:假设你的的数据库中使用 char 类型存储性别信息(例如:"1"表示男,"2"表示女),而前端需要展示为"男"和"女"时,你该怎样使用Mybatis Plus来进行处理?

实际上可以使用 MyBatis-Plus 的枚举映射功能来解决这个问题,以下是一个简单的示例代码:

  • 定义一个枚举类型来表示性别:
typescript 复制代码
public enum Gender {
    MALE("1", "男"),
    FEMALE("2", "女");

    private final String code;
    private final String label;

    Gender(String code, String label) {
        this.code = code;
        this.label = label;
    }

    public String getCode() {
        return code;
    }

    public String getLabel() {
        return label;
    }

    public static Gender fromCode(String code) {
        for (Gender gender : values()) {
            if (gender.getCode().equals(code)) {
                return gender;
            }
        }
        throw new IllegalArgumentException("Invalid gender code: " + code);
    }
}
  • 在实体类中使用该枚举类型,使用@TableField(value = "gender", exist = false)的注解进行映射:
kotlin 复制代码
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;

@TableName("user")
public class UserEntity {

    @TableField("gender")
    private String genderCode; // 数据库中存储的性别编码,类型为 char

    @TableField(exist = false)
    private Gender gender; // 非数据库字段,用于前端展示

    // 构造方法、getter 和 setter 略...

    // MyBatisPlus的自定义类型处理器,将数据库中的值映射为枚举类型
    @TableField(value = "gender", exist = false)
    private Gender getGender() {
        return Gender.fromCode(genderCode);
    }

    // MyBatisPlus的自定义类型处理器,将枚举类型映射为数据库中的值
    private void setGender(Gender gender) {
        this.genderCode = gender.getCode();
    }
}

在这个例子中,Gender 枚举类型表示性别,包含了性别的编码和标签,以及从编码获取枚举实例的方法。在实体类中,使用 genderCode 存储数据库中的 char 类型的性别编码,而 gender 则是用于前端展示的枚举类型。在 YourEntity 类中,通过 getGender 和 setGender 方法进行数据库字段和枚举类型的映射。

这样,你就可以在前端展示"男"和"女",而后台存储的仍然是对应的编码,MyBatis-Plus 会根据注解自动完成数据库字段和 Java 对象的映射。

相关推荐
愚农搬码32 分钟前
企业为什么需要表单引擎,而不是继续手写 Vue 表单?
后端
孟陬40 分钟前
技术周刊#158:ChatGPT 智能 UI 底层原理、个人智能体协议正式发布、一条 POST 请求即可锁死 Next.js 服务
人工智能·后端·全栈
小蒜学长1 小时前
基于SpringBoot+Vue的云南地区扶贫助农系统的设计与实现(代码+数据库+LW)
java·vue.js·spring boot·后端·乡村振兴
码剑客1 小时前
Gin+GORM+Redis 项目开发常见性能坑汇总(Go后端避坑指南)
redis·后端·golang·gin
java_nnnn1 小时前
Spring Boot 配置文件详解:从基础语法到 YAML 配置
spring boot·后端·github
SimonKing1 小时前
素笺( local-notes)全面优化,新增功能体验不一样的笔记
java·后端·程序员
何中应2 小时前
【Go-1】变量&常量定义
开发语言·后端·golang
愚农搬码2 小时前
电子表单、动态表单、表单设计器和表单引擎到底有什么区别?
java·后端
挖掘狂人2 小时前
Redis 为什么快?把 "存内存" 这句话拆开看
redis·后端·性能优化
Moment2 小时前
DeepSeek 发布新模型,直接把 Agent 联网搜索的门槛打下来了!
前端·后端