枚举数据字典

数据字典

可通过枚举来定义数据字典,定义一个枚举,并实现EnumDict接口:
1
@AllArgsConstructor
2
@Getter
3
@Dict(id="data-status") //定义一个id,默认为 DataStatusEnum.class.getSimpleName();
4
//支持反序列化
5
@JSONType(deserializer = EnumDict.EnumDictJSONDeserializer.class)
6
public enum DataStatusEnum implements EnumDict<Byte> {
7
ENABLED((byte) 1, "正常"),
8
DISABLED((byte) 0, "禁用"),
9
LOCK((byte) -1, "锁定"),
10
DELETED((byte) -10, "删除");
11
12
private Byte value;
13
14
private String text;
15
16
@Override
17
public boolean isWriteJSONObjectEnabled() {
18
//在序列化json的时候,是否将枚举序列化为对象。默认为true。
19
//可通过环境变量hsweb.enum.dict.disableWriteJSONObject修改全局默认值
20
return true;
21
}
22
}
Copied!
在实体类中使用:
1
@Data
2
public class User {
3
private String id;
4
5
//单选
6
private DataStatusEnum status;
7
8
//多选
9
private DataStatusEnum[] statusArr;
10
}
Copied!
作用:
1. 当值为单选,在持久化到数据库时,将自动存储字典的value值. 因此数据库字段的类型应该与value字段的类型一致.
2. 当值为多选,并且枚举选项数量小于64个,则会将值进行位运算(EnumDict.toBit)后存储.在查询的时候也使用位运算进行查询. 因此数据库字段的类型应该为数字类型。 如: where().in("statusArr",0,-1); 则将生成sql : where status_arr & {bit} != {bit} 。 在java中可以通过EnumDict中的静态方法进行判断,如 inanyIn.
3. 当枚举选项数量大于等于64个的时候,需要自行实现存储和查询逻辑,可以使用中间表的方式,也可以使用hsweb自带的实现,模块:hsweb-system/hsweb-system-dictionary
注意: 1,2的功能由hsweb-commons-dao模块去实现,如果你不没有使用hsweb自带的dao实现,可能无法使用此功能.
所有的字典都会注册到:DictDefineRepository,可通过此类去获取字典,以提供给前端或者其他地方使用.
在前端可通过接口:
dictionary/define/{id} 获取数据字段信息。
dictionary/define/{id}/items 获取字典选项信息。
Last modified 2yr ago
Copy link