transMap = new HashMap<>();
transMap.put("0","男");
transMap.put("1","女");
dictionaryTransService.refreshCache("sex",transMap);
```
1.2 字典翻译使用
``` java
//在对应的字段上 加此注解,type为TransType.DICTIONARY,key为字典分组码,ref为选填,如果设置了则会自动将翻译结果设置到此字段上
@Trans(type = TransType.DICTIONARY,key = "sex",ref = "sexName")
private Integer sex;
private String sexName;
```
2、AutoTrans(除了字典外的其他表翻译)使用说明---直接上代码了,可以配合InitializingBean一起玩.
2.1 service实现类改动,主要2个点1是添加AutoTrans注解,2 是实现AutoTransAble 接口
``` java
@Service
@AutoTrans(namespace = "teacher",fields = "name",defaultAlias = "teacher",useCache = true,useRedis = true) //namespace = 表别名 fields = 哪些字段需要出现在翻译结果中这里写了name defaultAlias =默认别名,比如我这里有个name字段别的表也有个name字段,为了区分这里配置为teacher 在翻译结果中 就会出现teacherName 而不是name useCache = 是否使用缓存 useRedis = 是否使用redis缓存
public class TeacherService implements AutoTransAble {
//在不使用缓存的时候使用,如果transMore的时候会拼接teacherid集合,调用此方法获取id集合对应的teacher对象
public List findByIds(List> ids) {
//推荐使用JPA/Mybatis Plus的方法哦
return this.baseMapper.selectBatchIds(ids);
}
// 在开启缓存的时候,springboot启动完成后会拿所有数据放到缓存里
@Override
public List select() {
return this.baseMapper.selectList((Wrapper)null)
}
// 在不开启缓存的时候,transone会通过此方法获取翻译数据
@Override
public VO selectById(Object primaryValue) {
return this.baseMapper.selectById(primaryValue);
}
```
以上,建议在baseservice中添加以上几个方法,这样子service就不用每个都写了。
2.2 Autotrans翻译使用
``` java
//指定翻译的namespace,和翻译类型为TransType.AUTO_TRANS
@Trans(type = TransType.AUTO_TRANS,key = "teacher")
private String teacherId;
//如果有2个teacherid 可以通过namespace#别名 来起别名区分
@Trans(type = TransType.AUTO_TRANS,key = "teacher#english")
private String englishteacherId;
//同样支持ref ,将字翻译结果赋值到某个字段上
@Trans(type = TransType.AUTO_TRANS,key = "teacher",ref = "teacherName")
private String teacherId;
private String teacherName;
//如果teacher 对外开放了多个字段当做翻译结果,比如 name和age,我这里只要age ref可以同如下写法
@Trans(type = TransType.AUTO_TRANS,key = "teacher#english",ref = "engTeacherAge#age")
private String englishteacherId;
private String engTeacherAge;
```
3、POJO修改 a 实现vo接口(Teacher类也要实现哦),提供一个transMap,框架会把翻译结果put到这个map中,建议使用basePOJO 的方法来实现
``` java
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Student implements VO {
private String studentName;
@Trans(type = TransType.AUTO_TRANS,key = "teacher")
private String teacherId;
@Trans(type = TransType.AUTO_TRANS,key = "teacher#english")
private String englishteacherId;
@Trans(type = TransType.DICTIONARY,key = "sex")
private Integer sex;
public Map transMap = new HashMap<>();
@Override
public Map getTransMap() {
return transMap;
}
}
```
4、框架中没有使用JPA/Mybatis Plus怎么办
``` java
//vo中有一个getPkey 方法默认是找@Id 或者 @TableId 标识的字段,如果没有使用JPA/Mybatis Plus 可重写此方法返回表主键的值比如 return this.id;
@JsonIgnore
@JSONField(serialize = false)
default Object getPkey(){
Field idField = getIdField(true);
try {
return idField.get(this);
} catch (IllegalAccessException e) {
return null;
}
}
```
5、准备工作已经完成,最后一步,使用翻译服务进行翻译
``` java
@Autowired
private TransService transService;
@Test
public void transOne(){
Student student = new Student();
student.setStudentName("张三");
student.setTeacherId("1");
student.setEnglishteacherId("2");
student.setSex(1);
//翻译一个对象
transService.transOne(student);
System.out.println(JsonUtils.bean2json(student));
}
@Test
public void transMore(){
Student student = new Student();
student.setStudentName("张三");
student.setTeacherId("1");
student.setEnglishteacherId("2");
student.setSex(1);
List studentList = new ArrayList<>();
studentList.add(student);
//翻译多个对象
transService.transMore(studentList);
System.out.println(JsonUtils.list2json(studentList));
}
```
6、缓存刷新
6.1 非集群模式下的缓存刷新
调用AutoTransService的refreshCache(Map messageMap)
map中put一个namespace 为teacher的话,就代表刷新teacher的缓存,如果map中什么都不put代表刷新所有缓存。
6.2 集群模式下的缓存刷新(必须开启redis支持才可以)
``` java
@Autowired
private RedisCacheService redisCacheService;
Map message = new HashMap();
message.put("transType", "auto");
message.put("namespace", "teacher");
this.redisCacheService.convertAndSend("trans", JsonUtils.map2json(message));
```
7、DEMO
https://gitee.com/fhs-opensource/easy_trans_springboot_demo
#### 参与贡献
1. 如果遇到使用问题可以加QQ群:976278956
#### 写到最后
教程看起来挺麻烦,只需要做2处封装,使用起来就很简单了,第一就是baseserivce的封装(主要提供那三个获取翻译数据的方法 和 缓存刷新的方法),第二就是base pojo的封装(主要是getTransMap 给翻译服务返回一个hashmap用来装填数据用),作者已经和ruoyi guns 做好了对接,需要资料什么的可以直接加群联系作者。