# MyBatis-Plus教程 - 11 映射枚举

在 Java 中是有枚举类型的,我们经常使用枚举类型来定义只有一些固定的值的变量。但是数据库中是没有枚举类型的,那么如何将 Java 中的枚举类型的属性与数据库中的字段进行映射呢?下面看一下。

# 11.1 实现映射枚举

# 1 修改数据库表

首先在数据库表中添加性别字段,待会用这个字段与 Java中枚举类型进行映射。

使用数字来表示各种性别: 0:未知1:男2:女

ALTER TABLE tb_user
ADD COLUMN gender TINYINT(1) DEFAULT 0;
1
2

# 2 定义枚举类型

定义一个枚举类,定义性别为三种 未知

需要在保存到数据库的属性上添加 @EnumValue 注解。

package com.foooor.helloplus.constant;

import com.baomidou.mybatisplus.annotation.EnumValue;

public enum Gender {
    UNKNOWN(0, "未知"),  // 未知
    MALE(1, "男"),  // 男
    FEMALE(2, "女");  // 女

    @EnumValue
    private Integer code;  // 对应0, 1, 2
    private String name;  // 对应"未知", "男", "女"

    Gender(Integer code, String name) {
        this.code = code;
        this.name = name;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

上面的配置,在保存的时候,是将 code 属性值保存到数据库 gender 字段。

# 3 修改pojo

在 User.java 类中添加性别属性:

@Data
@TableName("tb_user")
public class User {

    private Long id;
    private String username;
    private String password;
    private Gender gender;  //性别
    private Integer age;
    private String email;
    private Date createTime;
    private Date updateTime;

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 4 测试

编写测试方法进行测试:

User user = new User();
user.setUsername("foooor");
user.setEmail("foooor@foooor.com");
user.setPassword("123456");
user.setGender(Gender.MALE);  // 设置性别
user.setAge(13);
Date currentDate = new Date();
user.setCreateTime(currentDate);
user.setUpdateTime(currentDate);

int result = userMapper.insert(user);
log.info("插入用户结果:{}", result);
log.info("插入用户:{}", user.getId());
1
2
3
4
5
6
7
8
9
10
11
12
13

执行结果,将 性别男 对应的 1 插入到数据库:


查询的时候,会自动将数据库的值封装为枚举类型。