EasyTrans的使用

在项目中经常需要回显其他表的数据,例如:订单表中存了一个shopId,需要返回店铺名称与logo,之前或许需要在getLsit或者page接口进行数据处理,或者通过sql联表返回,现在只需要添加注解即可完成,这种情况就可以使用EasyTrans,https://www.kancloud.cn/shuaizai88/easy-trans/3100797

1. 引入依赖

<dependency>
    <groupId>com.fhs-opensource</groupId>
    <artifactId>easy-trans-spring-boot-starter</artifactId>
    <version>${中央仓库最新版本}</version>
</dependency>
<dependency>
    <groupId>com.fhs-opensource</groupId>
    <artifactId>easy-trans-mybatis-plus-extend</artifactId>
    <version>${中央仓库最新版本}</version>
</dependency>

2. 添加配置

easy-trans:
   #启用redis缓存 如果不用redis请设置为false
   is-enable-redis: false
   #启用全局翻译(拦截所有responseBody进行自动翻译),如果对于性能要求很高可关闭此配置
   is-enable-global: true
   #启用平铺模式
   is-enable-tile: true
   #微服务模式
   is-enable-cloud: false

3.基础类设置

主要是需要实现TransPojo,让其他DO继承这个基类即可

@Data
@JsonIgnoreProperties(value = "transMap") // 由于 Easy-Trans 会添加 transMap 属性,避免 Jackson 在 Spring Cache 反序列化报错
public abstract class BaseDO implements Serializable, TransPojo {

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    /**
     * 最后更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    /**
     * 创建者,目前使用 SysUser 的 id 编号
     *
     * 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。
     */
    @TableField(fill = FieldFill.INSERT, jdbcType = JdbcType.VARCHAR)
    private String creator;
    /**
     * 更新者,目前使用 SysUser 的 id 编号
     *
     * 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。
     */
    @TableField(fill = FieldFill.INSERT_UPDATE, jdbcType = JdbcType.VARCHAR)
    private String updater;
    /**
     * 是否删除
     */
    @TableLogic
    private Boolean deleted;

}

4. 使用

在回显的RespVO中,implements VO,之后使用注解@Trans()即可
注解参数
type:翻译类型
主要使用simple与rpc
traget:目标DO,如果是rpc则使用tragetClassName
fields:数据库字段名称
refs:翻译到指定字段,如果是单个字段也可使用ref

4.1. 基础用法

通过id字段来获取表中的其他字段

@Data
public class TradeOrderRespVO implements VO{
    @Trans(type = TransType.SIMPLE,target = ShopDO.class,fields={"shopName","shopLogo"},refs = {"shopName","shopLogo"})
    private Long shopId;

    private String shopName;

    private String shopLogo;
}

4.2. 跨模块翻译

@Data
public class TradeOrderRespVO implements VO{
    @Trans(type = TransType.RPC,targetClassName = "com.abc.demo.module.shop.object.ShopDO",fields={"shopName","shopLogo"},refs = {"shopName","shopLogo"})
    private Long shopId;

    private String shopName;

    private String shopLogo;
}

4.3. 非id,但唯一字段翻译

例如,该字段在另一个表中不是id,但是也是唯一字段,也可翻译

@Data
public class TradeOrderRespVO implements VO{
    @Trans(type = TransType.RPC,targetClassName = "com.abc.demo.module.shop.object.TestDO",fields={"shopName","shopLogo"},refs = {"shopName","shopLogo"},uniqueField="shopId")
    private Long shopId;

    private String shopName;

    private String shopLogo;
}

4.4. 顺序翻译

例如,先从shop表中获取了addressId字段,再去address表中获取地址数据

@Data
public class TradeOrderRespVO implements VO{
    @Trans(type = TransType.SIMPLE,target = ShopDO.class,fields={"shopName","shopLogo","addressId"},refs = {"shopName","shopLogo","addressId"},sort=1)
    private Long shopId;

    private String shopName;

    private String shopLogo;

    @Trans(type = TransType.SIMPLE,target = ShopDO.class,fields="detail",ref = "addressDetail",sort=2)
    private Long addressId;

    private String addressDetail;
}

posted @ 2025-04-18 10:51  鱼鱼寡欢  阅读(912)  评论(0)    收藏  举报