面试题:说说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 对象的映射。