Skip to content

🧑‍💻 数据翻译

  • 数据翻译,是指将数据从一种格式或结构转换为另一种格式或结构的过程。

如:将 A 类型对象的某个字段,“翻译”成 B 类型对象的某个字段。

数据库表中的字段 idcodesntype 等字段 翻译 为 对象的 name 字段数据。

codetype 等字段 翻译 为 枚举 项数据 或 数据字典 项 数据。

实现方案

通常情况下有以下几种方案实现:

  • 枚举定义 codetypename,代码中进行自动转换;
  • 数据库 SQL 联表查询
  • 单个批量查询 字典表 进行转换。
  • 单表查询代码中进行转换
  • 转换工具进行字段映射转换,如:MapStruct 字段映射转换。
  • 集成 Dromara Easy-Trans 框架,通过注解实现数据翻译.

Dromara Easy-Trans

  • 一个注解搞定数据翻译,减少 30% SQL 代码量。

字典翻译:将 gender code 0 转换为男/女

外键翻译:userId/idCardNo(身份证号码-唯一键场景)转换为userName

枚举翻译:Status.OPEN 转换为打开。

Dromara Easy Trans 适用于6种场景

1 我有一个id,但是我需要给客户展示他的title/name 但是我又不想自己手动做表关联查询

2 我有一个字典码 sex 和 一个字典值0 我希望能翻译成 男 给客户展示。

3 我有一组user id 比如 1,2,3 我希望能展示成 张三,李四,王五 给客户

4 我有一个枚举,枚举里有一个title字段,我想给前端展示title的值 给客户

5 我有一个唯一键(比如手机号,身份证号码,但是非其他表id字段),但是我需要给客户展示他的title/name 但是我又不想自己手动做表关联查询

6 Excel导入场景,把 用户名 admin 反向翻译为 userid1 把男 反向翻译为 gender_1 (具体看官网文档)

Dromara Easy Trans 支持的五种类型

字典翻译(TransType.DICTIONARY)

需要使用者把字典信息刷新到DictionaryTransService 中进行缓存,使用字典翻译的时候取缓存数据源

简单翻译(TransType.SIMPLE)

比如有userId需要userName或者userPo给前端,原理是组件使用MybatisPlus/JPA的API自动进行查询,把结果放到TransMap中。

跨微服务翻译(TransType.RPC)

比如订单和用户是2个微服务,但是我要在订单详情里展示订单的创建人的用户名,需要用到RPC翻译,原理是订单微服务使用restTemplate调用用户服务的一个统一的接口,把需要翻译的id传过去,然后用户微服务使用MybatisPlus/JPA的API自动进行查询把结果给订单微服务,然后订单微服务拿到数据后进行翻译,当然使用者只是需要一个注解,这些事情都是由组件自动完成的。

AutoTrans(TransType.AUTO)

还是id翻译name场景,但是使用者如果想组件调用自己写的方法而不通过Mybatis Plus/JPA 的API进行数据查询,就可以使用AutoTrans

枚举翻译(TransType.ENUM)

比如我要把SEX.BOY 翻译为男,可以用枚举翻译。