【SpringBoot3】使用Easy-Trans做字典翻译

06-01 1248阅读

在项目中经常会有一些根据id从某个表中查name或者从数据字典表中根据code查name的场景。

Easy-Trans 可以非常优雅的实现以上需求,可以有效减少字段冗余。

Easy-Trans介绍

适用场景

  1. 有userId/idCardNo(身份证号码-唯一键场景) 需要 userName,无需联表查询。
  2. 有gender code 0 需要 男。
  3. 枚举指定属性给前端
  4. 反向翻译

亮点

  1. 缓存支持
  2. 跨微服务翻译支持(User和Order 是2个不同微服务,order里面有userId 需要userName)
  3. 国际化支持
  4. 多种ORM框架适配
  5. 多数据源支持
  6. 集合支持(userIds [1,2,3] 翻译为张三,李四,王五)
  7. 反向翻译支持 男->gender 0 张三->user_id 1 陕西分公司 财务部 -> org_id 1
    【SpringBoot3】使用Easy-Trans做字典翻译

一、配置参数说明

在yaml中添加如下配置:

easy-trans:
   #启用redis缓存 如果不用redis请设置为false
   is-enable-redis: true
   #启用全局翻译(拦截所有responseBody进行自动翻译),如果对于性能要求很高可关闭此配置在方法上使用注解翻译
   is-enable-global: true 
   #启用平铺模式 手动翻译无效
   is-enable-tile: true
   #字典缓存放到redis 微服务模式请开启
   dict-use-redis: true 
   #使用@RpcTrans来标记哪些类可以进行RPC翻译,默认为关闭,多团队协作推荐开启
   is-enable-custom-rpc: true
   # ruoyi相关的框架请开启
   is-enable-map-result: true
   # 反向翻译数据库类型 mysql
   db-type: mysql 
   # Mybatis-plus 为 3.5.3.2版本以上的3.x 版本请设置为true
   mp-new: true

二、核心注解@Trans说明

1、参数说明

1、type
指定翻译的数据源
easy trans支持多种数据源,所以要手动指定。
可选值:

  • TransType.AUTO_TRANS 自动自定义数据源翻译,左侧有单独的章节讲解如何自定义数据源。
  • TransType.DICTIONARY 字典缓存为数据源
  • TransType.SIMPLE 本微服务/单体项目系统自动查表作为数据源
  • TransType.RPC 自动调用其他微服务接口进行自动查表作为数据源

2、key
指定具体数据源(type为TransType.AUTO_TRANS或者TransType.DICTIONARY才需要配置)

  • type为TransType.DICTIONARY 传入字典分组编码 比如orderStatus

3、ref
将翻译出来的数据映射到本pojo的某个属性上
比如根据userId翻译userName,vo中已经有userName了(必须手动在vo定义username属性,否则翻译失败),可以通过ref对vo的username进行赋值。

4、refs
类似ref,不过支持多个,是数组格式 不是字符串逗号分隔哦

----推荐使用平铺模式来代替ref和refs(详情见左侧平铺模式)----

5、target
TransType.SIMPLE的时候指定对方的po类
比如是userId那么就指定UserPo.class

6、targetClassName
TransType.RPC的时候指定对方的po类全名 @since 2.2.12 TransType.SIMPLE类型也支持
com.ucenter.po.User

7、fields
用来指定我需要对方类的要哪个字段(TransType.SIMPLE和TransType.RPC可用)
支持指定多个,数组格式,不是字符串分隔哦

8、alias
别名,解决翻译结果字段名重名问题
一个vo有createUserId和updateUserId 他们的结果都叫userName 就可以通过别名来区分,比如updateUserId配置了update 那么结果就为updateUserName。

9、serviceName
微服务名称(TransType.RPC 有效)
TransType.RPC的时候组件自动调用其他微服务的接口获取数据,所以要指定服务名称,easyTrans会自动去注册中心获取对应的服务实例URL进行调用。

10、serviceContextPath
服务的context-path
如果远程微服务配置了context-path 可以通过此属性来配置,保证RPC调用不会404

11、 uniqueField
vo中的属性不是对方的id,而是唯一键,这里配置target类唯一键的字段名。
TransType.RPC 和TransType.SIMPLE 可用。
注意:不支持同一个类中混用id和唯一键,比如:Student类中有createUserId 和 updateUserMobile(用户的唯一键字段)

12、dataSource
数据源名称
在多数据源环境下指定此翻译使用哪个数据源 TransType.SIMPLE 有效。

13、sort
翻译顺序
比如 文章表有createBy 字段 对应用户表 用户表有orgid字段对应 组织表。
文章vo需要展示创建人以及创建人所在部门。 就可以指定sort 先对createBy字段进行翻译,取orgid用ref设置到文章vo上,然后再用orgid翻译org的名称。

2、@Trans源码

@Retention(RetentionPolicy.RUNTIME)
@Target({
   ElementType.FIELD})
public @interface Trans {
   
    /**
     * 获取翻译类型,比如 wordbook 是字典
     *
     * @return 类型
     */
    String type();
    /**
     * 字段 比如  要翻译男女 上面的type写dictionary 此key写sex即可
     *
     * @return
     */
    String key() default "";
    /**
     * 设置到的target value  比如我有一个sex字段,有一个sexName 字段  sex是0 设置ref翻译服务可以自动把sexname设置为男
     * 目标类字段配置了多个 有teacherName,teacherage 两个字段   我想要teacherName  可以写 teacherName#name
     *
     * @return
     */
    String ref() default "";
    /**
     * ref 支持多个,为了保持兼容新加了一个字段
     * 作用同ref 只是支持多个
     *
     * @return
     */
    String[] refs() default {
   };
    /**
     * 目标class
     *
     * @return
     */
    Class
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码