⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 一行代码的逆袭 「一行代码的逆袭」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

还在为ID转名称、字典码转文本、跨服务字段翻译写一堆冗余代码?

SpringBoot 开箱即用的数据翻译框架 —— Easy‑Trans,一个注解搞定所有翻译场景,少写30%以上业务代码。

一、它能解决什么?

日常开发高频痛点,它全能搞定:

  • 根据用户ID自动查出用户名、手机号,不用手动关联查询
  • 字典码 0/1 自动转成「男/女」
  • 多个用户ID批量转成「张三,李四,王五」
  • 枚举自动映射成前端展示文本
  • 跨微服务ID一键翻译,不用手写RPC/Feign

二、5大翻译类型,覆盖全场景

Easy‑Trans 内置5种翻译模式,业务场景全覆盖:

三、快速接入:3步集成

1. 引入Maven依赖

<!-- 核心starter  -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>easy-trans-spring-boot-starter</artifactId>
<version>2.3.1</version>
</dependency>
<!-- MyBatis-Plus扩展(用JPA则引入jpa-extend) -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>easy-trans-mybatis-plus-extend</artifactId>
<version>2.3.1</version>
</dependency>

yml配置

easy-trans:
#启用redis缓存 如果不用redis请设置为false
is-enable-redis:true
#启用全局翻译(拦截所有responseBody进行自动翻译),如果对于性能要求高可关闭此配置,在方法上使用注解翻译
is-enable-global:true
#是否启用平铺模式 翻译后的字段与原属性同级展示
is-enable-tile:false
#字典缓存放到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

2. 实体类标记(实现 TransPojo)

需要被翻译/作为数据源的实体,实现 TransPojo 接口:

@Data
public class User implements TransPojo {
private Long id;
private String userName;
private Integer gender;
}

四、高频场景

简单翻译(SIMPLE):ID→名称

设备表的 userId 自动翻译为用户名/手机号:

@Data
public class Device implements TransPojo {
private Long id;
private String deviceName;

// 自动关联User表,查userName、phone
@Trans(
type = TransType.SIMPLE,
target = User.class,
fields = {"userName", "phone"}
)
private Long userId;
}

查询后设备数据后,翻译后的数据自动在transMap字段里返回前端。

字典翻译:码值→文本:

// 1.如果项目有字典表 ,可初始化缓存字典,如:
@Autowired
private DictionaryTransService dictService;

Map<String, String> map = new HashMap<>();
map.put("0", "男");
map.put("1", "女");
dictService.refreshCache("gender", map);

使用字典注解

@Trans(type = TransType.DICTIONARY, key = "gender")
private Integer gender; //性别

枚举翻译(ENUM):优雅映射

// 枚举定义
public enum SexEnum {
MAN(1, "男"), WOMAN(0, "女");
private Integer code;
private String desc;
}

实体使用

@Trans(type = TransType.ENUM, key = "desc")
private SexEnum sexEnum;

查询性别数据后,接口则返回:

跨微服务翻译(RPC)

例如订单服务中查用户名称:

@Trans(
type = TransType.RPC,
serviceName = "user-service",
targetClassName = "cn.demo.user.pojo.User",
fields = "userName"
)
private Long userId;

自定义数据源(AUTO_TRANS)

想自己写SQL/逻辑时使用:

// 1. 配置包扫描
easy-trans:
autotrans:
package: com.demo.service.**

// 2. 业务类实现AutoTransable
@AutoTrans(namespace = "user", fields = {"userName"})
@Service
publicclass UserServiceImpl implements AutoTransable<User> {
@Override
public List<User> selectByIds(List<?> ids) {
// 自定义查询逻辑
return userMapper.selectBatchIds(ids);
}
}

五、性能优化:开启缓存

给数据源实体加 @TransDefaultSett:

@TransDefaultSett(
isUseCache = true, // 开启缓存
cacheSeconds = 600, // 过期时间
maxCache = 1000 // 最大缓存数
)
public class User implements TransPojo { ... }

开启后只查主表,关联数据走缓存,接口性能大幅提升。

六、总结

Easy‑Trans 做到:

  • 零侵入、少代码、高复用
  • 单表/字典/枚举/跨服务全覆盖
  • 批量查询+缓存优化,性能无忧

遇到ID转名称、码值转文本,一个 @Trans 直接搞定!

官网:

http://easy-trans.fhs-opensource.cn/

文章目录
  1. 1. 一、它能解决什么?
  2. 2. 二、5大翻译类型,覆盖全场景
  3. 3. 三、快速接入:3步集成
    1. 3.0.1. 1. 引入Maven依赖
    2. 3.0.2. yml配置
    3. 3.0.3. 2. 实体类标记(实现 TransPojo)
  • 4. 四、高频场景
    1. 4.0.1. 简单翻译(SIMPLE):ID→名称
    2. 4.0.2. 字典翻译:码值→文本:
    3. 4.0.3. 枚举翻译(ENUM):优雅映射
    4. 4.0.4. 跨微服务翻译(RPC)
    5. 4.0.5. 自定义数据源(AUTO_TRANS)
  • 5. 五、性能优化:开启缓存
  • 6. 六、总结