实体类枚举

12/13/2023

在mysql中,我们通常会用int字段来表示枚举,映射到java实体类的时候为Integer。如果我们在企业开发中大量使用 1,2..来设置实体类,将非常不利于维护,因此mybatis提供了枚举注解简化开发。

# sql脚本

create table t_order_return_reason
(
    id          int auto_increment primary key,
    name        varchar(128) null comment '退货原因',
    sort        int          null comment '排序',
    publish     int          null comment '发布状态',
    create_time datetime     null comment '创建时间'
);
1
2
3
4
5
6
7
8

# 定义枚举类

@Getter
@AllArgsConstructor
public enum PublishEnum {

    NON_PUBLISH(0, "未发布"),
    CANCEL_PUBLISH(1, "取消发布"),
    PUBLISH(2, "发布");

    @EnumValue
    private final int value;

    private final String message;
}
1
2
3
4
5
6
7
8
9
10
11
12
13

@EnumValue 注解指定了枚举类映射为mysql列表值

# 定义实体类

@TableName(value ="t_order_return_reason")
@Data
public class OrderReturnReason implements Serializable {
    /**
     * 
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 退货原因
     */
    @TableField(value = "name")
    private String name;

    /**
     * 排序
     */
    @TableField(value = "sort")
    private Integer sort;

    /**
     * 发布状态
     */
    @TableField(value = "publish")
    private PublishEnum publish;

    /**
     * 创建时间
     */
    @TableField(value = "create_time")
    private LocalDateTime createTime;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36