数据字典
字典
代码定义
@Dictionary
全限定名:io.terminus.trantorframework.api.annotation.Dictionary
要声明一个 Trantor 字典资源,我们推荐使用 Java interface 定义字典资源信息,例如:
- Integer 类型字典
@Dictionary(name = "性别", desc = "性别字典", type = DictType.Int)public interface SexDict { /** * 通过@DictionaryItem注解对每一个类型进行标注,iconColor:字典类型的颜色;icon字典类型的图标 */ @DictionaryItem(value = "男", icon = Icon.dot, iconColor = Icon.Color.Green, displayOrder = 1) Integer male = 0;
@DictionaryItem(value = "女", icon = Icon.dot, iconColor = Icon.Color.Purple, displayOrder = 2) Integer female = 1;
@DictionaryItem(value = "保密", icon = Icon.dot, iconColor = Icon.Color.Orange, displayOrder = 3) Integer unknown = 2;}- String 类型字典
@Dictionary(name = "课程枚举", desc = "所有课程枚举")public interface SubjectDict { /** * 通过dictItemGroup属性为字典项进行分组 */ @DictionaryItem(value = "语文", dictItemGroup = {"arts"}) String Chinese = "Chinese";
@DictionaryItem(value = "数学", dictItemGroup = {"science"}) String Mathematics = "Mathematics";
@DictionaryItem(value = "英语", dictItemGroup = {"arts", "science"}) String English = "English";}参数解释:
| 属性 | 类型 | 必填 | 默认值 | 解释 |
|---|---|---|---|---|
| name | String | 否 | 当前类名 | 字典名称 |
| desc | String | 否 | - | 字典描述 |
| type | Enum | 否 | DictType.String | 字典类型,目前 Trantor 支持两中类型: DictType.String DictType.Int |
| userEditable | Boolean | 否 | false | 统一工作台用户是否可编辑,目前该功能不可用 |
@DictionaryItem
全限定名:io.terminus.trantorframework.api.annotation.DictionaryItem
声明 Trantor 字典类的字段为字典项,当前类必须使用 @Dictionary 声明。
参数解释:
| 属性 | 类型 | 必填 | 默认值 | 解释 |
|---|---|---|---|---|
| value | String | 是 | - | 字典项展示标签名,主要用于在前端显示的标签信息,类似 label。 |
| icon | Enum | 否 | Icon.None | 展示在标签名前的图标。 更多可选项请参考: io.terminus.trantorframework.api.annotation.typemeta.Icon |
| iconColor | Enum | 否 | Icon.Color.Black | 图标颜色。 更多可选项请参考: io.terminus.trantorframework.api.annotation.typemeta.Icon.Color |
| displayOrder | Integer | 否 | -1 | 字典项的排序值 |
| dictItemGroup | Array | 否 | 空数组 | 字典项分组,通过该属性将字典项进行分组,主要用于前端分组过滤和展示。 用法可以查看参考示例 |
在线化
Trantor 1.0 开始字典编排都在线上完成,打开交付控制台进行创建/编排字典(各开发环境的交付控制台不同,请各位开发同学根据自己实际的开发情况去访问)。
字典编排的入口为 进入项目 -> 配置 -> 业务域 -> 当前App在线化业务域 -> 字典 。
⚠️ 在线化只能创建字典项类型为 String 类型的字典。
扩展字典
扩展字典不是字典,字典扩展只是对原字典进行 修改或者新增 字典项,并不会产生新的字典。
代码定义
@ExtendDictionary
全限定名:io.terminus.trantorframework.api.annotation.ExtendDictionary
扩展字典类上必须标记@ExtendDictionary,且类 必须 继承原字典类或其他扩展字典类。
下面的代码演示了在原字典 CompanyStatus 上新增一个字典项
@ExtendDictionary()public interface CompanyStatusExtend extends CompanyStatus { @DictionaryItem(value = "rest") public final String rest = "rest";}在线化
字典扩展的入口为 进入项目 -> 配置 -> 业务域 -> 进入依赖APP/基础项目的在线化业务域 -> 字典 。字典记录点击”扩展” 操作,提交后,实际生成的 “扩展字典”(不是字典),在之前选择的业务域的字典列表里。
具体操作参考下图。

💡 交付物可以 “任意修改”(本质上是覆盖)原字典项或其他 “扩展字典” 除了
key外的其他属性。

在线化创建的 “扩展字典” 生成代码的逻辑:从哪个字典(类)点的扩展,则 java 父类为那个类,举个例子:
1)gaia 新建原字典: key 为 gaia_A,java 类型为 io.terminus.gaia.A
2)gaia-app 从类名为 A,唯一标识为 gaia_A的字典记录,执行扩展, 创建 java 类型为 io.terminus.gaia.app.B的 “扩展字典”,则生成的 B 代码如下
package io.terminus.gaia.app;
import io.terminus.gaia.A;import io.terminus.trantorframework.api.annotation.ExtendModel;
@ExtendDictionary()public interface B extends A {}3)custom 从类名为 B,唯一标识为 gaia_A的字典记录,执行扩展, 创建 java 类型 为 io.terminus.custom.C的 “扩展字典”,则生成的 C 代码如下
package io.terminus.custom;
import io.terminus.gaia.A;import io.terminus.gaia.app.B;import io.terminus.trantorframework.api.annotation.ExtendModel;
@ExtendDictionary()public interface C extends B {}使用
@DictionaryMeta
全限定名:io.terminus.trantorframework.api.annotation.typemeta.DictionaryMeta
主要标识模型 Model 中的某个字段 Field 的类型为字典类型,用于指定当前字段的可选值范围来源于哪个 Trantor 字典资源。
此外,Trantor 支持定义单选字典和多选字典,在字典声明上是一样的,区别在于使用字典的模型字段类型是否是集合,示例如下:
- 单选字典
@Data@Model(name = "学生模型", mainField = Student.name_field)public class Student extends BaseModel<Long> {
// 单字典定义 @Field(name = "性别") @DictionaryMeta(value = SexDict.class) private Integer sex;}- 多选字典
@Data@Model(name = "学生模型", mainField = Student.name_field)public class Student extends BaseModel<Long> {
// 多字典定义,通过 Collection<String> 存储多个字典值 @Field(name = "主修课程") @DictionaryMeta(value = SubjectDict.class) private Collection<String> subjects;}参数解释:
| 属性 | 类型 | 必填 | 默认值 | 解释 |
|---|---|---|---|---|
| value | Class<?> | 是 | - | 字典值来源类,来源类必须是 Trantor 字典,即使用 @Dictionary 注解声明。 |