所需组件
- 核心模块 alg-core-starter
- 数据库访问模块 alg-db-starter
- 标准数据模块 alg-standcode-starter
- 数据库驱动
- 数据库中存在dict_parm_cfg表
背景
标准数据模块用于处理枚举类型数据转义问题。例如,某系统中,人员类型有管理员、普通用户两类,分别用枚举值0和1表示,在后台存储时我们只会保存0和1这样的枚举值,而前端展示时又希望能显示"管理员"、"普通用户"这样的字样,此时就可以通过标准数据进行枚举值转义。
标准数据模块提供了如下能力: - 在pojo对象中插入指定注解,使在组装返回报文时自动返回对应的转义后字段 - 提供按照枚举值查询对应的转义值的能力 - 提供RESTFUL接口,一次查询某一类枚举值的所有枚举-转义字段,适合前端渲染下拉列表这样的场景
使用详解
加入标准数据模块后,框架会在启动时读取数据库中dict_parm_cfg表的内容并保存在内存中。基于MySql语法的建表语句如下,Oracle数据库可以以此类推
create table dict_parm_cfg
(
parm_tpcd varchar(100) default '' not null comment '字典类型代码',
parm_cd varchar(100) default '' not null comment '字典代码',
parval varchar(240) default '' not null comment '字典取值',
parm_tpnm varchar(240) default '' null comment '字典类型名称',
primary key (parm_tpcd, parm_cd)
) comment '数据字典表';
该表中: - parm_tpcd 为字典类型代码,例如"人员类型"对应的代码 - parm_cd 为字典代码,例如"管理员"对应的代码0 - parval 为字典取值,例如"管理员" - parm_tpnm 为字典类型的说明,可以为空
返回报文转义
例如,有一个响应报文对应JAVA类:
public class TestOutVo {
@StandCode("carModel")
private String val;
}
使用@StandCode注解,后面的值carModel时dict_parm_cfg表中对应的parm_tpcd字段。 假设dict_parm_cfg表中有如下数:
| parm_tpcd | parm_cd | parval | parm_tpnm |
|---|---|---|---|
| carModel | 1 | 轿车 | |
| carModel | 2 | 越野车 |
那么当返回对象TestOutVo中val字段的值为1时,会自动生成如下的json报文
{
val: "1",
val_desc: "轿车"
}
其中val_desc字段是框架根据parm_tpcd='carModel',parm_cd='1'的取值在表中匹配转义的
手动查询枚举值对应的取值
可以在需要的类中注入
@Autowired
private StandCodeResolver standCodeResolver;
然后在使用时调用:
standCodeResolver.getValue("carModel", "1");
就可以得到对应的值“轿车”
同时该对象还提供getStandCodeListByParmTpCd方法,可以根据parm_tpcd返回全部取值列表:
standCodeResolver.getStandCodeListByParmTpCd("carModel")
自动实现RESTFUL接口,获得按类型查询枚举值集合的能力
标准数据模块默认提供一个RESTFUL接口,提供按类型查询枚举值集合的能力,默认url为standcode/{parm_tpcd},例如按照默认配置访问URL http://localhost:8080/standcode/carModel, 返回:
[
{
parmTpcd: "carModel",
parmCd: "1",
parval: "轿车",
parmTpnm: ""
},
{
parmTpcd: "carModel",
parmCd: "2",
parval: "越野车",
parmTpnm: ""
}
]
可配置项
- alg.standcode.field-suffix 标准数据模块生成响应报文时对应的字段名称配置,默认值为_desc,例如字段名为val,则默认会添加一个字段val_desc作为枚举值对应的描述值字段
- alg.standcode.standcode-query-url 标准数据模块对应的查询枚举集合的RESTFUL接口的URL,默认为/standcode/,即默认访问http://localhost:8080/standcode/xxx,即可获得xxx类型枚举集合的全集