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;
}

浙公网安备 33010602011771号