更新内容:
- 修复AUTO 类型refs 多个字段问题
- 添加翻译缓存,减少DB查询次数
很开心的告诉大家,EasyTrans各种翻译都支持缓存啦,下面介绍具体用法,在贴代码之前先搞清楚几个全局概念:
1、isAccess true 按照最后一次访问时间计算过期时间 false按照缓存新建时间计算过期时间
2、cacheSeconds 缓存过期时间,单位:秒
3、maxCache 最大缓存的数量,超过这个值会删除老缓存(根据缓存新建时间),然后添加新缓存
SIMPLE和RPC 配置缓存
把2个翻译类注入进来,然后根据不同的数据类型配置不同的缓存配置。
@Configuration
public class EasyTransCacheConfig implements InitializingBean {
@Autowired
private SimpleTransService simpleTransService;
@Autowired
private RpcTransService rpcTransService;
@Override
public void afterPropertiesSet() throws Exception {
SimpleTransService.TransCacheSett cacheSett = new SimpleTransService.TransCacheSett();
cacheSett.setCacheSeconds(10);
cacheSett.setMaxCache(1000);
cacheSett.setAccess(false);
simpleTransService.setTransCache(School.class,cacheSett);
simpleTransService.setTransCache(UserMp.class,cacheSett);
rpcTransService.setTransCache(School.class.getName(),cacheSett);
rpcTransService.setTransCache(UserMp.class.getName(),cacheSett);
}
}
AUTO 配置缓存
主要配置globalCache 设置为true
@Service
@AutoTrans(namespace = "teacher",fields = {"name","age"},
defaultAlias = "teacher",globalCache = true,cacheSeconds = 10,maxCache = 100)
public class TeacherService implements AutoTransAble {
//其他代码
}
组件介绍:
表里我们经常存放字典码,外键 。给前端展示的时候要展示字典描述 (比如 sex 0 代表男),外键要显示 title/name (如 userid 1 要翻译为张三)。字典比较简单,很多项目都直接交给前端翻译,但是外键翻译是必须要后台来做的,最常见的做法就是 表 join ,这样又要自己写 sql 比较麻烦。使用 Easy Trans,只需要一个注解就可以搞定数据翻译。
支持的场景:
- 字典翻译 把 sex 0 翻译为男
- 普通外键翻译 / 唯一键翻译 框架使用 mp/jpa 能力自动帮你去执行 sql 根据外键查询 name/title 并且 set 到你的 vo 字段上
- 跨微服务翻译 比如 order (订单服务) user (用户服务) 是 2 个微服务,但是 order 要展示创建人姓名,表里只有 user id 可以使用跨微服务翻译
- 枚举翻译 把枚举中的汉字给到前端
Trans 注解:
程序员只需要掌握这一个注解就算熟练使用 EasyTrans 了,绝对不干让程序员掉更多头发的事情。
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
//实现TransPojo 接口,代表这个类需要被翻译或者被当作翻译的数据源
public class Student implements TransPojo {
// 字典翻译 ref为非必填
@Trans(type = TransType.DICTIONARY,key = "sex",ref = "sexName")
private Integer sex;
//这个字段可以不写,实现了TransPojo接口后有一个getTransMap方法,sexName可以让前端去transMap取
private String sexName;
//SIMPLE 翻译,用于关联其他的表进行翻译 schoolName 为 School 的一个字段
@Trans(type = TransType.SIMPLE,target = School.class,fields = "schoolName")
private String schoolId;
//远程翻译,调用其他微服务的数据源进行翻译
@Trans(type = TransType.RPC,targetClassName = "com.fhs.test.pojo.School",fields = "schoolName",serviceName = "easyTrans",alias = "middle")
private String middleSchoolId;
// 枚举翻译,返回文科还是理科给前端
@Trans(type=TransType.ENUM,key = "desc")
private StudentType studentType = StudentType.ARTS;
public static enum StudentType{
ARTS("文科"),
SCIENCES("理科");
private String desc;
StudentType(String desc){
this.desc = desc;
}
}
}
项目地址:https://gitee.com/fhs-opensource/easy_trans
文档地址:https://gitee.com/fhs-opensource/easy_trans/wikis