EasyTrans,一个注解搞定数据翻译,减少30%SQL代码量

news2024/11/18 18:25:59

介绍


easy trans适用于3种场景

1 有userId/idCardNo(身份证号码-唯一键场景) 需要 userName,无需联表查询。

2 有gender code 0 需要 男。

3 枚举指定属性给前端

亮点

1 缓存支持

2 跨微服务翻译支持(User和Order 是2个不同微服务,order里面有userId 需要userName)

3 国际化支持

4 多种ORM框架适配

5 多数据源支持

6 集合支持(userIds [1,2,3] 翻译为张三,李四,王五)

使用步骤


技术经理/架构 需要做的事情

1 、先把maven 引用加上(注意,阿里云Maven仓库可能无法获取最新版本,切到腾讯或者使用中央仓库即可。当然也可以选择阿里云有的版本使用)

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

Mybatis plus 扩展:

      <dependency>
            <groupId>com.fhs-opensource</groupId>
            <artifactId>easy-trans-mybatis-plus-extend</artifactId>
            <version>2.1.5</version>
        </dependency>

JPA 扩展:

     <dependency>
            <groupId>com.fhs-opensource</groupId>
            <artifactId>easy-trans-jpa-extend</artifactId>
            <version>2.1.5</version>
        </dependency>

Beetl SQL 扩展:

          <dependency>
            <groupId>com.fhs-opensource</groupId>
            <artifactId>easy-trans-beetl-sql-extend</artifactId>
            <version>2.1.5</version>
        </dependency>

TK Mybatis(通用mapper) 扩展:

        <dependency>
            <groupId>com.fhs-opensource</groupId>
            <artifactId>easy-trans-tk-extend</artifactId>
            <version>2.1.5</version>
        </dependency>

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

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

2、在yaml中添加如下配置

easy-trans:
   #启用redis缓存 如果不用redis请设置为false
   is-enable-redis: true
   #启用全局翻译(拦截所有responseBody进行自动翻译),如果对于性能要求很高可关闭此配置
   is-enable-global: true 
   #启用平铺模式
   is-enable-tile: true
   #字典缓存放到redis 微服务模式请开启
   dict-use-redis: true 
   # ruoyi相关的请开启
   is-enable-map-result: true

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

@SpringBootApplication(exclude = { RedisAutoConfiguration.class })

4、初始化字典数据(如果你们项目没字典表请忽略)

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

5、微服务配置

A、白名单添加 /easyTrans/proxy/** 保证其不被拦截,RPC trans的时候easytrans会自动调用目标微服务的接口来获取数据。

B、应用之间的认证可以通过filter/interceptor实现,然后自定义RestTemplate 保证easytrans在请求用户服务的时候带上需要认证的参数

普通程序员需要做的事情

pojo 中添加

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

然后访问你的controller,看返回结果。

easy trans 支持的五种类型

字典翻译(TransType.DICTIONARY)

需要使用者把字典信息刷新到DictionaryTransService 中进行缓存,使用字典翻译的时候取缓存数据源

简单翻译(TransType.SIMPLE)

比如有userId需要userName或者userPo给前端,原理是组件使用MybatisPlus/JPA的API自动进行查询,把结果放到transMap中。

跨微服务翻译(TransType.RPC)

比如订单和用户是2个微服务,但是我要在订单详情里展示订单的创建人的用户名,需要用到RPC翻译,原理是订单微服务使用restTemplate调用用户服务的一个统一的接口,把需要翻译的id传过去,然后用户微服务使用MybatisPlus/JPA的API自动进行查询把结果给订单微服务,然后订单微服务拿到数据后进行翻译,当然使用者只是需要一个注解,这些事情都是由组件自动完成的。

AutoTrans(TransType.AUTO)

还是id翻译name场景,但是使用者如果想组件调用自己写的方法而不通过Mybatis Plus/JPA 的API进行数据查询,就可以使用AutoTrans

枚举翻译(TransType.ENUM)

比如我要把SEX.BOY 翻译为男,可以用枚举翻译。

项目地址


https://gitee.com/dromara/easy_trans

示例项目


https://gitee.com/fhs-opensource/easy_trans_springboot_demo

插件文档


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

已经使用此插件的企业(非完全统计)


1、陕西小伙伴网络科技有限公司

2、中软国际云智能业务集团

3、深圳市易流科技股份有限公司

4、陕西逐道科技有限公司

5、深圳市易联联盟科技有限公司

6、中体数科(北京)体育发展有限公司

7、首都信息发展股份有限公司

8、航天神舟智慧系统技术有限公司

9、小诺V2 https://gitee.com/xiaonuobase/snowy

10、山东大小同屏科技有限公司

11、山东酸橙网络科技有限公司

12、桔子数字科技有限公司

13、成都新潮传媒集团股份有限公司

14、陕西汇每家信息科技有限公司(每一天便利店连锁)

15、江西云牛科技

16、广州彩讯数字技术有限公司

17、江苏誉鸣航智能科技有限公司

18、maku-boot https://gitee.com/makunet/maku-boot

19、北京大美星空科技有限公司

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/159945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

strapi系列--如何自定义非界面化的接口,定制化自己的业务逻辑

为什么要进行后端定制呢&#xff1f; 在实际开发过程中&#xff0c;项目中有些需求是不需要创建界面化接口的&#xff0c;需要我们定制化自己的业务逻辑&#xff0c;那么我们该如何处理这个需求呢&#xff1f;本文以图文并茂的形式&#xff0c;定制一个我们自己的业务逻辑接口…

blender 应用物体变换的作用

编辑模式和物体模式操作的区别 旋转 在物体模式下旋转时物体旋转值会发生变换** 在编辑模式下旋转时物体不会发生变化** 缩放 在物体模式下缩放会导致缩放尺寸发生变化 在编辑模式下缩放时&#xff0c;缩放属性不会发生变化 应用物体变换 把物体模式下的缩放旋转变换应…

Android---TabLayout

目录 TabLayout TabItem ​编辑 演示效果的xml TabLayout TabLayout 在开发中一般作为选项卡使用&#xff0c;常与 ViewPager2 和 Fragment 结合起来使用。 常用属性&#xff1a; app:tabBackground 设置 TabLayout 的背景色&#xff0c;改变整个TabLayout 的颜色&#xf…

绪论的习题

刘佳瑜*&#xff0c;王越 *, 黄扬* , 张钊* (淮北师范大学计算机科学与技术学院&#xff0c;安徽 淮北) *These authors contributed to the work equllly and should be regarded as co-first authors. &#x1f31e;欢迎来到机器学习的世界 &#x1f308;博客主页&#xff1…

idea调试常用的快捷键

一、F7 步入调试&#xff0c;进入当前函数内部。 说明&#xff1a; 如果步入的是自己编的函数&#xff0c;可读性会好很多。 如果是系统函数&#xff0c;我个人目前水平&#xff0c;觉得很难读。而且idea系统已编写好的函数&#xff0c;除非是研究源码&#xff0c;否则感觉…

javaweb08 javaweb、tomcat、maven简介、servlet原理和实例、Mapping映射、请求转发和读取properties文件

文章目录一、javaweb简介二、Tomcat三、Maven四、Servlet简介和HelloWorld五、Servlet原理六、Mapping映射七、ServletContext八、请求转发九、读取资源文件properties一、javaweb简介 在java中&#xff0c;动态web资源开发的技术成为javaweb 人们访问到的任何一个网页和资源…

C语言字符串库函数模拟实现

字符串检验 strlen 函数原型 /// brief 返回给定空终止字符串的长度&#xff0c;即首元素为 str 所指&#xff0c;且不包含首个空字符的字符数组中的字符数 /// param str 指向要检测的字符串的指针 /// return 字符串 str 的长度 size_t strlen( const char *str );空终止字…

C语言实现通讯录静态版本

通讯录中首先要有人的信息&#xff0c;然后是存放多少个人的信息 再丰富一下通讯录的功能&#xff0c;例如增删查改、显示、排序。 我们分三个文件来实现。 1、实现简易的菜单&#xff0c;通讯录的整体逻辑 #include"contact.h"void menu() {printf("*****…

900页文档比对只需5分钟?鸿翼InWise文档比对,以人工智能撬动办公效率杠杆

在日常办公中&#xff0c;多份文件间的检查、纠错、复核工作不可避免&#xff0c;这类工作往往具有很强的重复性&#xff0c;占用了大量的工作时间。鸿翼InWise平台文档比对能够赋能企业极速完成海量文档、图片的高精度比对&#xff0c;以人工智能撬动企业生产力提升。 随着数字…

MySQL调优-MySQL索引深入总结

目录 MySQL索引深入总结 InnoDB中的索引复习 聚集索引/聚簇索引 问题&#xff1a;如果我们没有定义主键呢&#xff1f; 问题&#xff1a;分析一下B树三层和四层的性能差异&#xff1f; 辅助索引/二级索引 回表 问题&#xff1a;为什么我们还需要一次回表操作呢?直接把完…

亚马逊云科技:小鹏汽车拓展全球市场,跑出“加速度”

汽车产业变革走向下半场&#xff0c;智能汽车的市场份额之争也从国内走向国际&#xff0c;出海之战讲求速战速决&#xff0c;小鹏汽车携手亚马逊云科技拓展海外市场&#xff0c;完成海外布局。 扩大“鹏”友圈&#xff0c;迈进欧洲市场 近年来&#xff0c;小鹏汽车不断推进全…

数字人民币年度总结:支付变革未停、试点之风再起

文/尹宁出品/陀螺研究院数字人民币&#xff0c;无疑是近年来热度最高的词汇之一&#xff0c;作为我国法币的数字形式&#xff0c;至其出世伊始&#xff0c;不论是资金溯源的透明追踪、零售更新的消费用途&#xff0c;还是跨境结算的雄图大略&#xff0c;围绕其推广与意义的讨论…

关于 国产麒麟系统上长时间运行Qt程序根目录/下磁盘空间占用100%导致无法写入 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/128671382 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

LeetCode 129. 求根节点到叶节点数字之和

&#x1f308;&#x1f308;&#x1f604;&#x1f604; 欢迎来到茶色岛独家岛屿&#xff0c;本期将为大家揭晓LeetCode 129. 求根节点到叶节点数字之和&#xff0c;做好准备了么&#xff0c;那么开始吧。 &#x1f332;&#x1f332;&#x1f434;&#x1f434; 一、题目名…

4.6 集成运放的使用

一、使用时必做的工作 1、集成运放的外引线&#xff08;管脚&#xff09; 目前集成运放的常见封装方式有金属壳封装和双列直插式封装&#xff0c;外形如图4.6.1所示&#xff0c;以后者居多。双列直插式有 8、10、12、14、16 管脚等种类&#xff0c;虽然它们的外引线排列日趋标…

laravel JWT 用户认证 实现API认证

JWT 是 JSON Web Token 的缩写&#xff0c;它是一个规范&#xff0c;让用户和服务器之间传递安全可靠的信息。 JWT介绍 JWT 由头部&#xff08;header&#xff09;、载荷&#xff08;payload&#xff09;与签名&#xff08;signature&#xff09;组成 { “typ”:“JWT”, “a…

python的8大核心语句,你确定不来看看嘛,那格局就小啦

Python 是一种代表简单思想的语言&#xff0c;其语法相对简单&#xff0c;很容易上手。不过&#xff0c;如果就此小视 Python 语法的精妙和深邃&#xff0c;那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点&#xff0c;并附上详细的实例代码。如能在实战…

学习使用 Clion 第一次使用Clion开发Qt的hello world

为什么使用Clion之前在window上开发软件基本上是使用VS2022,使用Clion在windows上开发并不是嫌弃VS2022不好用,相反我依然觉得VS是世界上最好用的IDE没有之一.没有其他的理由,这是我第一款使用的IDE,而且已经很使用的熟练.那为什么还要学习使用Clion了,其实是考虑到跨平台.VS有…

【C进阶】 字符串函数和字符分类函数

家人们欢迎来到小姜的世界&#xff0c;<<点此>>传送门 这里有详细的关于C/C/Linux等的解析课程&#xff0c;家人们赶紧冲鸭&#xff01;&#xff01;&#xff01; 客官&#xff0c;码字不易&#xff0c;来个三连支持一下吧&#xff01;&#xff01;&#xff01;关注…

Linux操作系统-信号

信号的基本认识&#xff1a;Linux信号机制&#xff1a;它是一种异步的通知机制&#xff0c;用来提醒进程一个事件已经发生。如上图&#xff0c;Linux操作系统中&#xff0c;共有编号为1~31的31个普通信号&#xff0c;编号为34~64的31个实时信号。日常中只会涉及和使用到普通信号…