Easy_Trans 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
Easy_Trans 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
Easy_Trans 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 Apache
开发语言 Java 查看源码 »
操作系统 跨平台
软件类型 开源软件
所属分类 开发工具Java开发工具
开源组织
地区 国产
投 递 者 fhs_framework
适用人群 未知
收录时间 2021-03-11

软件简介

2021年啦,Mybatis Plus/Jpa的使用越来越多,项目中写SQL越来越少了,有的时候不得已还得写sql,比如: 关联字典,关联其他的表使用外键拿其他表的title/name 等等,为了更优雅的实现id变name/title 字典码变字典描述,easy trans横空出世,通过2个注解就能实现数据翻译,配合自己封装的一些baseService baseController,在配合一些代码生成器插件(比如EasyCode),可真正实现简单的CRUD不写一行代码的目标。

先看效果:

enter description here

easy trans适用于三种场景
1 我有一个id,但是我需要给客户展示他的title/name 但是我又不想做表关联查询
2 我有一个字典吗 sex 和 一个字典值0 我希望能翻译成 男 给客户展示。
3 我有一组user id 比如 1,2,3 我希望能展示成 张三,李四,王五 给客户

easy trans的三种模式
1 使用redis缓存模式
    一般用于分布式/微服务系统,比如我有用户服务和订单服务,在订单列表中需要展示创建人,他们又不是同一个进程,db也不是同一个,可使用redis 翻译模式

2 内存缓存(hashmap)模式
    一般用于单体模式,缓存放到hashmap中。

3 非缓存模式
    非缓存模式不使用缓存,调用 findbyids方法来获取数据用于翻译,一般用于表数据量比较大,缓存扛不住的情况。

安装教程

1 、先把maven 引用加上

       <dependency>
            <groupId>com.fhs-opensource</groupId>
            <artifactId>easy-trans-spring-boot-starter</artifactId>
            <version>1.0.0</version>
        </dependency>

2、如果使用Redis请添加redis的引用(如果之前加过了请不要重复添加)

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

3、在yaml中添加如下配置

easy-trans:
   autotrans:
       #您的service所在的包 支持通配符比如com.*.**.service.**,他的默认值是com.*.*.service.impl
       package: com.fhs.test.service.** 
	   #启用redis缓存
   is-enable-redis: true
  #yixi 
spring:
  redis:
    host: 192.168.0.213
    port: 6379
    password: 123456
    database: 0
    timeout: 6000

4、如果不使用redis,请在启动类加禁用掉redis的自动配置类

@SpringBootApplication(exclude = { RedisAutoConfiguration.class })

使用说明(请务必看完本段)

1、字典翻译使用说明---直接上代码了,可以配合InitializingBean一起玩.
  1.1 翻译缓存初始化

    @Autowired  //注入字典翻译服务
    private  DictionaryTransService dictionaryTransService;
	
	   //在某处将字典缓存刷新到翻译服务中,以下是demo
	    Map<String,String> transMap = new HashMap<>();
        transMap.put("0","男");
        transMap.put("1","女");
        dictionaryTransService.refreshCache("sex",transMap);

  1.2 字典翻译使用

   //在对应的字段上 加此注解,type为TransType.DICTIONARY,key为字典分组码
    @Trans(type = TransType.DICTIONARY,key = "sex")
    private Integer sex;

2、AutoTrans(除了字典外的其他表翻译)使用说明---直接上代码了,可以配合InitializingBean一起玩.
  2.1 service实现类改动,主要2个点1是添加AutoTrans注解,2 是实现AutoTransAble 接口

@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<P> 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翻译使用

     //指定翻译的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;

3、POJO修改 a 实现vo接口(Teacher类也要实现哦),提供一个transMap,框架会把翻译结果put到这个map中,建议使用basePOJO 的方法来实现

@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<String,String> transMap = new HashMap<>();

    @Override
    public Map<String, String> getTransMap() {
        return transMap;
    }
}

4、框架中没有使用JPA/Mybatis Plus怎么办

   //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、准备工作已经完成,最后一步,使用翻译服务进行翻译

    @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<Student> studentList = new ArrayList<>();
        studentList.add(student);
		//翻译多个对象
        transService.transMore(studentList);
        System.out.println(JsonUtils.list2json(studentList));
    }

6、缓存刷新
  6.1 非集群模式下的缓存刷新
调用AutoTransService的refreshCache(Map<String, Object> messageMap)
map中put一个namespace 为teacher的话,就代表刷新teacher的缓存,如果map中什么都不put代表刷新所有缓存。
  6.2 集群模式下的缓存刷新(必须开启redis支持才可以)

 @Autowired
 private RedisCacheService redisCacheService;
 Map<String, String> 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 做好了对接,需要资料什么的可以直接加群联系作者。

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击加入讨论🔥(3)
发表了资讯
09/20 17:48

EasyTrans 2.0.3 发布 让您少写30%的多表sql

更新内容: 字典翻译支持 集合翻译 比如爱好有篮球,足球 对应的code=[0,1] 添加国产orm beetl支持 支持的ORM框架: 1、Mybatis Plus 2、JPA 3、 TK Mybatis 4、BeetlSQL 组件介绍: 表里我们经常存放字典码,外键 。给前端展示的时候要展示字典描述 (比如 sex 0 代表男),外键要显示 title/name (如 userid 1 要翻译为张三)。字典比较简单,很多项目都直接交给前端翻译,但是外键翻译是必须要后台来做的,最常见的做法就是 表 ...

0
12
发表了资讯
08/08 14:29

EasyTrans 2.0.1 发布,您的业务代码还可以更少一些

更新内容: 修复AUTO 类型refs 多个字段问题 添加翻译缓存,减少DB查询次数 很开心的告诉大家,EasyTrans各种翻译都支持缓存啦,下面介绍具体用法,在贴代码之前先搞清楚几个全局概念: 1、isAccess true 按照最后一次访问时间计算过期时间 false按照缓存新建时间计算过期时间 2、cacheSeconds 缓存过期时间,单位:秒 3、maxCache 最大缓存的数量,超过这个值会删除老缓存(根据缓存新建时间),然后添加新缓存 SIMPLE和RPC 配置...

0
15
发表了资讯
07/04 18:45

EasyTrans 1.2.9 发布,多表关联外键翻译组件

更新内容: 修改了包名以 "-" 分词,原来是以下划线分词 添加对TK mybatis(通用Mapper)的支持 插件介绍: 表里我们经常存放字典码,外键 给前端展示的时候要展示字典描述 (比如 sex 0 代表男),外键要显示 title/name (如 userid 1 要翻译为张三)。字典比较简单,很多项目都直接交给前端翻译,但是外键翻译是必须要后台来做的,最常见的做法就是 表 join ,这样又要自己写 sql 比较麻烦。使用 Easy Trans,只需要一个注解就可以...

0
9
发表了资讯
05/24 09:30

EasyTrans 1.2.6 发布,Mybatis Plus 多表关联外键翻译组件

更新内容: 字典翻译缓存支持放到redis中 添加使用map的实现类包装vo 进行翻译(比如ruoyi的AjaxResult) 插件介绍: 表里我们经常存放字典码,外键 给前端展示的时候要展示字典描述 (比如 sex 0 代表男),外键要显示 title/name (如 userid 1 要翻译为张三)。字典比较简单,很多项目都直接交给前端翻译,但是外键翻译是必须要后台来做的,最常见的做法就是 表 join ,这样又要自己写 sql 比较麻烦。使用 Easy Trans,只需要一个注...

10
6
发表了资讯
05/06 12:06

EasyTrans 1.2.4 发布,Mybatis Plus 多表关联外键翻译组件

更新内容: 支持表唯一键字段代替主键翻译(比如excel导入填写用户手机号,插入数据库的时候需要userid) 修复使用 @TransMethodResult 翻译方法返回值的时候,平铺不起作用的问题 修复vo中有循环嵌套 会引发无限循环问题 插件介绍: 表里我们经常存放字典码,外键 给前端展示的时候要展示字典描述(比如 sex 0 代表男),外键要显示title/name (如userid1 要翻译为张三)。字典比较简单,很多项目都直接交给前端翻译,但是外键翻译是...

0
17
发表了资讯
02/16 10:52

Easy_Trans 1.1.9 版本发布,一个注解搞定字典/外键翻译

1、升级内容 A 新增多数据源支持 如果一个系统连接了多个数据库,可能user和order是2个库,order在翻译创建人的时候,就可以指定user数据源 @Trans(type = TransType.SIMPLE, target = User.class, fields = "userName", dataSource="User") private Long userId; B 优化自动查询SQL执行次数 C bug fix 解决跨微服务翻译,使用JPA 时主键数据类型问题 解决JPA 根据id查询,id匹配不到数据时候报错。 2、介绍 在项目开发中,...

6
7
发表了资讯
2021/12/06 11:12

Easy_Trans 1.1.6 版本发布,一个注解搞定字典/外键翻译

1、升级内容 A 新增枚举翻译 配置type=TransType.ENUM 并且指定key 为desc 则会把 枚举的desc字段返回给前端 @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; ...

1
4
发表了资讯
2021/10/15 16:04

Easy_Trans 1.1.1 版本发布,一个注解搞定字典/外键翻译

1、升级内容 A @Trans注解ref支持添加多个(建议使用平铺模式而不是ref) B 修复@Trans type写错的话,报空指针bug C 添加平铺模式 平铺模式为:比如我有一个student类,他有一个teacherid,根据teacherid翻译得到的teacherName框架会放到student的transMap这个map中,序列完了如下: { "id":1, "teacherId":1, "transMap":{"teacherName":"王老师"} } 开启平铺模式后序列化为: { "id":1, "teacherId":1, "teacherNa...

8
16
发表了资讯
2021/10/13 11:32

Easy_Trans 1.0.9 发布,新增跨微服务翻译

1、升级内容 A 添加跨微服务翻译(需要配合mybatis plus/Spring data JPA) 比如订单服务的order 需要根据userId 获取到userName ,但是user 在用户服务上,就可以用到easyTrans的跨微服务翻译支持。 //远程翻译,使用其他的微服务当作数据源进行翻译 @Trans(type = TransType.RPC,targetClassName = "com.fhs.test.pojo.User",fields = "schoolName",serviceName = "user") private String userId; B AutoTrans 添加...

0
5
发表了资讯
2021/09/24 16:19

Easy_Trans 1.0.8 发布,一个注解搞定字典/外键翻译

1、升级内容 A 字典翻译添加国际化支持 B 添加simple翻译,通过一个注解即可实现外键翻译 其他表的name/title 的功能。 C 对所有返回responseBody的controller方法返回结果进行自动翻译 2、介绍 在项目开发中,借助JPA和Mybatis Plus我们已经可以做到单表查询不写SQL,但是很多时候我们需要关联字典表,关联其他表来实现字典码和外键的翻译,又要去写sql,使用 EasyTrans 你只需要在被翻译的pojo属性上加一个注解即可完成字典码...

4
13
发表了资讯
2021/04/28 08:28

Easy_Trans 1.0.4 发布,添加 JPA 支持

Easy_Trans 1.0.4 更新说明 A 修复@TransMethodResult 泛型支持bug B 添加JPA支持 2.Easy Trans简介 easy trans是一个springboot的字典/外键 翻译组件,可以不用表关联查询 根据字典码 外键翻译 字典描述 和title/name 等信息,使用效果和方法如下图: 3、Easy Trans集成 EasyTrans支持 进程缓存翻译,redis缓存翻译,动态查表三种方式,集成步骤如下: 1 、先把maven 引用加上 <dependency> <groupId>com.fhs-opensourc...

3
6
2021/04/14 17:48

Easy_Trans 1.0.3 发布,添加 Mybatis Plus 支持

Easy_Trans 1.0.3 更新说明 A 添加了Mybatis Plus的扩展,让MP项目用起来更简单 B 添加了@TransMethodResult 注解,加到方法上会自动对返回结果进行翻译 2、Easy Trans简介 easy trans是一个springboot的字典/外键 翻译组件,可以不用表关联查询 根据字典码 外键翻译 字典描述 和title/name 等信息,使用效果和方法如下图: 3、Easy Trans集成 EasyTrans支持 进程缓存翻译,redis缓存翻译,动态查表三种方式,集成步骤如下: 1 ...

0
15
2021/03/13 21:44

easy_trans 1.0.1 更新,好用的 springboot 数据/字典翻译组件

1、1.0.1更新内容 支持翻译结果绑定到pojo的字段中(v1.0.0是只支持将翻译结果put到transmap中) 2、Easy Trans简介 easy trans是一个springboot的字典/外键 翻译组件,可以不用表关联查询 根据字典码 外键翻译 字典描述 和title/name 等信息,使用效果和方法如下图: 3、Easy Trans集成 EasyTrans支持 进程缓存翻译,redis缓存翻译,动态查表三种方式,集成步骤如下: 1 、先把maven 引用加上 <dependency> ...

5
12
2021/03/11 19:37

Easy_Trans 1.0.0 发布, 一款 Spring Boot id/字典码翻译组件

1. EasyTrans是干嘛的? 学生表有一个班主任id,有一个性别字典码,在展示的时候需要展示班主任姓名和男女,传统做法有几种 方案1 表关联,如果学生表除了性别,还有爱好等其他字典码 需要关联多次,麻烦性能还差 方案2 先查询学生表,然后查询 字典表 和老师表 ,处理字典 和老师数据,遍历学生数据,给学生POJO赋值 还是太麻烦 EasyTrans 就是提供了一种更优雅的解决方案,可以通过简单的一个注解,然后调用翻译服务对POJO进行...

3
12
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
3 评论
43 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部