-
Notifications
You must be signed in to change notification settings - Fork 9
数据字典转换 @TransformDict
罗战 edited this page Oct 10, 2022
·
1 revision
数据字典一般适用于字典项有可能改变的情况,项目中会建立一张数据字典表存储各种数据字典数据,如性别、订单状态、系统编码等等,一般核心字段有三个:group(分组,有的表设计会叫type)、code(编码)、text(文本)
举个栗子:
group | code | text |
---|---|---|
sex | 1 | 男 |
sex | 2 | 女 |
order_type | 1 | 已下单 |
order_type | 2 | 已发货 |
order_type | 3 | 快递中 |
... | ... | ... |
@TransformDict
注解定义如下:
/**
* 数据字典转换
*
* @author R
*/
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target({ElementType.FIELD})
@Transform
public @interface TransformDict {
/**
* 来源字段
* <p>
* 默认自动推断(推断规则:如注解标注的字段是userName,自动推断结果为“user”,“userId”或“userCode”)
*/
@AliasFor(annotation = Transform.class)
String from() default "";
/**
* 组名
* 数据字典中有许多不同的组,如”sex“,”orderType“等等
*/
String group();
}
数据字典因为和业务相关,具体的转换逻辑还是交给业务自己定制,Transformer不做过多的干涉
/**
* 数据字典转换器(示例)
*/
@Component
public class DictTransformer implements IDictTransformer<Integer> {
@Resource
private DictionaryService dictionaryService;
@Override
public String transform(@Nonnull Integer originalValue, String group) {
// 实际情况这里可以调用远程服务或本地服务
return dictionaryService.getText(group, originalValue);
}
}
注意:
- 实现
IDictTransformer
接口,泛型是数据字典中字典编码(code)的类型 - 在类上加上
@Component
加入spring容器,Transformer会在启动时扫描IDictTransformer
接口的实现类,扫描到了实现类才会开启数据字典转换功能。 - transform方法中根据你的实际情况实现字典转换逻辑,注意group指的就是数据字典中的“组名”,如“sex”、“order_type”等等。
在字段上使用@TransformDict
注解使用转换功能
// 班干部id
private Integer classLeader;
// 班干部名称(数据字典转换,group指定字典分组)
@TransformDict(group = "classLeader")
private String classLeaderName;
By @Robot