数据库字段为enum
对于数据库而言,如果一个字段的值,只有几个。例如下面
性别:男,女,保密
状态:在线,离线,勿扰
那么对这种字段就要采用enum类型。
下面以gender为例
那么对应java中的实体类的gender字段要怎么设置呢
实体类代码
class Person{
private String username;
//可以发现,对于性别我们用的是一个Gender类来表示,而这个类就是枚举类
private Gender gender;
//省略setter和getter方法
}
枚举类Gender
enum Gender{
MALE("男",0),FEMALE("女",1),SECRET("保密",2);
//添加属性,以对应上面的括号里的内容
private String sex;
private int state;
//私有构造方法,填充类属性
private Gender(String sex,int state){
this.sex= sex;
this.state=state;
}
private static HashMap<Integer,Gender> sexMap = new HashMap<>();
//利用静态代码块,在new的时候,将这些字段加载进来
static {
for (Gender gender : Gender.values()) {
sexMap.put(gender.getState(),gender);
}
}
//通过这个方法,可以取到状态(0,1,2)对应的enum,然后将这个enum返回
public static Gender setValue(Integer value){
Gender sex = sexMap.get(value);
if(sex == null) {
throw new IllegalArgumentException("No element matches " + value);
}
return sex;
}
//省略setter和getter
}
测试
public static void main(String[] args) {
Person person = new Person();
try {
//这个 1 相当于从前端传过来的性别选择状态
person.setGender(Gender.setValue(1));
} catch (Exception e) {
System.out.println("没有这个状态对应的enum");
}
System.out.println("对应性别:"+person.getGender().getSex());
}