@Enumerated

在javax.persistence包中有这么两个注解@Enumerated,@EnumType

@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface Enumerated {

    /** (Optional) The type used in mapping an enum type. */
    EnumType value() default ORDINAL;
}
public enum EnumType {
    /** 持久枚举类型字段为整数,元素一般从0开始索引. */
    ORDINAL,

    /** 持久枚举类型为字符串. */
    STRING
}

当我需要持久化一个枚举类字段的时候,就可以用@Enumerated来标注枚举类型。来举个栗子:

数据库中有一张employee表
在这里插入图片描述
对应的Employee实体

@Entity
@Table(name = "employee", schema = "public")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Employee {

    @Id
    @GeneratedValue
    @Column(name = "id")
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "sex")
    @Enumerated(EnumType.ORDINAL)//性别字段持久化为0,1
    private Sex sex;

    @Column(name = "type")
    @Enumerated(EnumType.STRING)//枚举字符串
    private Type type;
}

Sex枚举类:

public enum Sex {

    MAIL("男"),
    FMAIL("女");

    private String value;

    private Sex(String value) {
        this.value = value;
    }
}

Type枚举类:

public enum Type {

    PROGRAMMER("开发"),
    PM("项目经理"),
    TESTERS("测试"),
    UI("妹子"),
    ;

    private String type;

    private Type(String type) {
    }
}

那现在我们来看一下插入几条数据看下是什么效果。

EmployeeRepostory employeeRepostory = context.getBean(EmployeeRepostory.class);

Employee fireYao = Employee.builder().name("fireYao").sex(Sex.MAIL).type(Type.PROGRAMMER).build();

Employee gakki = Employee.builder().name("gakki").sex(Sex.FMAIL).type(Type.UI).build();

Employee whoever = Employee.builder().name("whoever").sex(Sex.FMAIL).type(Type.PM).build();

employeeRepostory.save(Arrays.asList(fireYao,gakki,whoever));

插入数据后,数据库中:
在这里插入图片描述
可以看到,sex字段被持久化为0,1这样的int字段,因为在sex字段上标注了@Enumerated(EnumType.ORDINAL),那这样持久化到数据库时,就会根据枚举类中的字段,依次从0开始标记,Sex中MAIL(“男”)就为0,FMAIL(“女”)就为1依次增加。
在type字段上标注了@Enumerated(EnumType.STRING),就直接根据枚举类的字段字符串来自动持久化到数据库。
如果枚举字段上不加注解,那么枚举字段就会被默认映射为 int 类型存储。
那现在我们来看查询一下的结果。

List<Employee> all = employeeRepostory.findAll();

在这里插入图片描述
可以看到,查询出来的结果中sex字段又自动还原成了Sex枚举字段。

from: https://juejin.im/post/59dedd0b51882578ba156161

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值