明天的明天 永远的永远 未知的一切 我与你一起承担 ??

是非成败转头空 青山依旧在 几度夕阳红 。。。
  博客园  :: 首页  :: 管理

数据翻译——Easy_Trans的简单使用

Posted on 2023-11-21 17:15  且行且思  阅读(1502)  评论(0编辑  收藏  举报

目录

Easy Trans
1、适用场景
2、easy trans 支持的五种类型
3、环境搭建
4、简单翻译(TransType.SIMPLE)
5、字典翻译(TransType.DICTIONARY)
6、跨微服务翻译(TransType.RPC)
7、自定义数据源翻译(TransType.AUTO_Trance)

Easy Trans

1、适用场景

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

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

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

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

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

字典翻译(TransType.DICTIONARY)

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

简单翻译(TransType.SIMPLE)

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

跨微服务翻译(TransType.RPC)

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

自动翻译(TransType.AUTO)

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

枚举翻译(TransType.ENUM)

比如我要把SEX.BOY 翻译为男,可以用枚举翻译。
3、环境搭建

引入maven依赖

注意,阿里云Maven仓库因为阿里本身软件升级所以暂时无法同步中央仓库的新发布版本依赖,所以要用新版本请使用中央仓库maven

 <dependency>
            <groupId>com.fhs-opensource</groupId>
            <artifactId>easy-trans-spring-bootstarter</artifactId>
            <version>2.0.12</version>
 </dependency>

使用Mybatis plus,请引入Mybatis plus 扩展:

    <dependency>
        <groupId>com.fhs-opensource</groupId>
        <artifactId>easy-trans-mybatis-plusextend</artifactId>
        <version>2.0.12</version>
    </dependency>

使用JPA,请引入JPA 扩展:

 

    <dependency>
        <groupId>com.fhs-opensource</groupId>
        <artifactId>easy-trans-jpa-extend</artifactId>
        <version>2.0.12</version>
    </dependency>

 

使用Redis,请添加redis的引用

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-dataredis</artifactId>
        </dependency>

 

4、简单翻译(TransType.SIMPLE)

4.1 使用步骤

TransType.SIMPLE 简单翻译,无需自己实现数据源(推荐),适用于根据id翻译name/title等 。此数据源需要配合easy_trans_mybatis_plus_extend或者easy_trans_jpa_extend一起使用。

在需要翻译的字段上添加下面一行注解即可:

@Trans(type = TransType.SIMPLE,target = Users.class,fields = "userName")

type表示翻译类型 -- 简单翻译

target表示要翻译出来的结果字段在哪个表中(对应的实体类)

fields表示对应翻译的是哪个字段

除了此这几个属性必须添加外,还可以添加ref/refs,fileds,alias,后面会详细介绍他们的用法。

我们准备一张设备表device和一张用户表users,其中device表中的device_id 字段关联了users表中的id字段。

Device.java

 

package com.example.pojo;
 
import com.baomidou.mybatisplus.annotation.TableField;
import com.fhs.core.trans.anno.Trans;
import com.fhs.core.trans.anno.TransDefaultSett;
import com.fhs.core.trans.constant.TransType;
import com.fhs.core.trans.vo.TransPojo;
import lombok.Data;
 
import java.util.List;
 
@Data
//实现TransPojo  接口,代表这个类需要被翻译或者被当作翻译的数据源
public class Device extends BaseEntity implements TransPojo {
    private Long id;
 
    private String deviceCode;
 
    private String deviceName;
 
    private String devicePlace;
 
    private String deviceImage;
//SIMPLE 翻译,用于关联其他的表进行翻译 userName和phone为Users 的字段
    @Trans(type = TransType.SIMPLE,target = Users.class,fields = {"userName", "phone"})
    private Long userId;
 
}
 

 

 

Users.java

 

package com.example.pojo;
 
 
 
import com.baomidou.mybatisplus.annotation.TableField;
 
 
import com.fhs.core.trans.anno.Trans;
import com.fhs.core.trans.anno.TransDefaultSett;
import com.fhs.core.trans.constant.TransType;
import com.fhs.core.trans.vo.TransPojo;
import lombok.Data;
 
import java.time.LocalDate;
import java.util.Date;
 
 
@Data
//实现TransPojo  接口,代表这个类需要被翻译或者被当作翻译的数据源
public class Users extends BaseEntity implements TransPojo {
    private Long id;
 
    private String userName;
 
    private LocalDate hireDate;  //入职时间
 
    private Integer gender;    //用户性别,1--男,0--女
 
    private String phone;
 
}
 
 

 

DeviceController.java

 

   @Autowired
    private DeviceService deviceService;
    
    
    @GetMapping
    //TransMethodResult用于将翻译的结果映射到trnasMap中展示
    @TransMethodResult
    public R<List<Device>> getDeviceList() {
        //list()是Mybais plus提供的方法
        List<Device> deviceList = deviceService.list();
    }

 

 

查询结果如下:

 

我们发现userId已经成功地被翻译成了userName和phone,并将翻译的结果封装在了transMap中。

如果我们想让userName、phone在json中和userId同级展示,可以使用平铺模式:

在application.xml中开局平铺模式

 

easy-trans:
  is-enable-tile: true #启用平铺模式

 

 

ref/refs,fileds,alias的使用

ref----将翻译出来的数据映射到本实体类的某个属性上

refs----将翻译出来的数据映射到本实体类的某个属性上--多个

alias----别名,解决翻译结果字段名重名问题

 

4.3 SIMPLE 翻译缓存

官方提供了@TransDefaultSett注解 来开启SIMPLE的缓存功能,只需要给数据源实体类上加@TransDefaultSett(isUseCache = true) 即可。可选参数:

1. isUseCache 是否开启 缓存 默认为false 需要开启设置为true即可

2. cacheSeconds 缓存失效时间 单位秒 默认5

3. maxCache 最大缓存数量 默认为1000

4. isAccess 默认false 设置为true的话会按照最后一次访问时间 进行缓存过期计时 false按照添加时间计时