Skip to content

数据字典

前言

数据字典是在一个系统中,常用描述或存储一些固定的业务数据,比如性别、年级等固定的信息。在 AIFlowy 中,有一个数据库字典的模块,用于管理数据字典,如下图所示:

data_dictionary.png

数据字典的类型

在 AIFlowy 中,有如下几种类型的数据字典:

  • 枚举类字典:用 Java 定义的枚举类来当做数据字典。
  • 数据表字典:使用某张表的数据来当做数据字典。
  • Dict 表数据字典:自己添加数据到表 tb_sys_dict 以及 tb_sys_dict_item 来当做数据字典。
  • 自定义数据字典:通过实现 DictLoader 来当做数据字典。

DictLoader 示例代码

以下代码中,用于定义一个名为 "sysPositions" 的数据字典,前端可以通过接口传入 "sysPositions" code 读取到该数据字典的内容。

java
@Component
public class SysPositionDict implements DictLoader {
    @Override
    public String code() {
        return "sysPositions";
    }

    @Override
    public Dict load(String keyword, Map<String, String[]> parameters) {
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.select("id", "name");
        queryWrapper.in("dept_id", parameters.get("deptIds"));
        List<Row> rows = Db.selectListByQuery("tb_sys_position", queryWrapper);
        List<DictItem> items = null;
        if (rows != null) {
            items = new ArrayList<>(rows.size());
            for (Row row : rows) {
                DictItem dictItem = new DictItem();
                dictItem.setValue(row.get("id"));
                dictItem.setLabel(String.valueOf(row.get("name")));
                items.add(dictItem);
            }
        }
        Dict dict = new Dict();
        dict.setCode("sysPositions");
        dict.setItems(items);
        return dict;
    }
}

字典数据的读取

在 AIFlowy 中,提供了一个用于读取数据字典的接口:/api/v1/dict/items/{code} 。用于传入字典 code 读取数据字典。