首页 > 编程语言 >Java easy_trans字典绑定,Java字典注解绑定

Java easy_trans字典绑定,Java字典注解绑定

时间:2022-08-31 17:04:14浏览次数:69  
标签:翻译 Java 绑定 redis private easy trans com 字典

 

================================

©Copyright 蕃薯耀 2022-08-31

https://www.cnblogs.com/fanshuyao/

 

一、引入Maven依赖

基于<mybatisPlus.version>3.4.3.3</mybatisPlus.version>实现

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatisPlus.version}</version>
        </dependency>
        
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>${mybatisPlusGenerator.version}</version>
            <scope>provided</scope>
        </dependency>

 

 

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        
        <dependency>
            <groupId>com.fhs-opensource</groupId>
            <artifactId>easy-trans-spring-boot-starter</artifactId>
            <version>2.0.2</version>
            <exclusions>
                <exclusion>
                    <groupId>com.baomidou</groupId>
                    <artifactId>mybatis-plus-annotation</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        
        <dependency>
            <groupId>com.fhs-opensource</groupId>
            <artifactId>easy-trans-mybatis-plus-extend</artifactId>
            <version>2.0.2</version>
            <exclusions>
                <exclusion>
                    <groupId>com.baomidou</groupId>
                    <artifactId>mybatis-plus-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.baomidou</groupId>
                    <artifactId>mybatis-plus-extension</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.4</version>
        </dependency>

 

不要漏了:commons-beanutils

 

解决Mybatis-Plus版本不一致的注解冲突问题

Caused by: java.lang.ClassNotFoundException: com.baomidou.mybatisplus.annotation.OrderBy
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 101 common frames omitted

 

 

排除 mybatis-plus-annotation

        <dependency>
            <groupId>com.fhs-opensource</groupId>
            <artifactId>easy-trans-spring-boot-starter</artifactId>
            <version>2.0.2</version>
            <exclusions>
                <exclusion>
                    <groupId>com.baomidou</groupId>
                    <artifactId>mybatis-plus-annotation</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

 

 

二、application.properties 配置

1、Redis配置

spring.redis.host=192.168.11.210
spring.redis.port=6379
spring.redis.database=0
#spring.redis.password=
spring.redis.timeout=3000
 

 

 

2、easy-trans配置

#启用redis缓存 如果不用redis请设置为false
#如果不使用redis,请在启动类加禁用掉redis的自动配置类
#@SpringBootApplication(exclude = { RedisAutoConfiguration.class })
easy-trans.is-enable-redis: true
#方式1:启用全局翻译(拦截所有responseBody进行自动翻译),如果对于性能要求很高可关闭此配置
#方式2:标记为 @TransMethodResult 的方法返回值会自动翻译,基于AOP实现,实现效果同全局翻译。
#方式3:翻译服务的核心是TransService 把此类@Autowired到你的controller或者service中,
#调用 transOne/transBatch 方法可以翻译单个/多个 pojo,为了性能,TransService 不处理嵌套,
#比如User里套了个Org org里面的数据不会被翻译。
easy-trans.is-enable-global: false
#启用平铺模式
easy-trans.is-enable-tile: true
#如果你项目框架使用map的子类包装vo(比如 ruoyi的ajaxResult类)请设置为true否则请不设置或者设置为false
#easy-trans.is-enable-map-result: true

 

 

三、实体类继承和注解

1、实体类继承 TransPojo 接口

public class WarehousePrincipal implements Serializable,TransPojo

 

 

2、属性添加 @Trans 注解

@Trans(type = TransType.DICTIONARY,key = "warehouse_principal", ref = "typeName")

 

3、完整示例

@TableName("warehouse_principal")
@ApiModel(value = "WarehousePrincipal对象", description = "")
public class WarehousePrincipal implements Serializable,TransPojo {
 
    private static final long serialVersionUID = 1L;
 
      @ApiModelProperty("主键")
      @TableId(value = "id", type = IdType.AUTO)
      private Long id;
 
 
      @Trans(type = TransType.DICTIONARY,key = "warehouse_principal", ref = "typeName")
      @ApiModelProperty("负责人类型,默认为0,0:仓库管理员,1:仓库责任人")
      private Integer type;
 
      
 
}

 

4、其它使用情形

//实现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方法添加 @TransMethodResult 注解

因为不是全局配置,所以在需要转换的方法增加注解。

    @TransMethodResult
    @RequestMapping("/queryForPageVO")
    public Result queryForPage(@RequestBody Page<WarehousePrincipalVO> page, 
            @RequestBody WarehousePrincipalVO params) {
        
        return Result.ok(warehousePrincipalService.queryForPageVO(page, params));
    }

 

如果要开启全局注解,则需要在配置文件中修改配置项,但开启全局会影响性能。

#方式1:启用全局翻译(拦截所有responseBody进行自动翻译),如果对于性能要求很高可关闭此配置
#方式2:标记为 @TransMethodResult 的方法返回值会自动翻译,基于AOP实现,实现效果同全局翻译。
#方式3:翻译服务的核心是TransService 把此类@Autowired到你的controller或者service中,
#调用 transOne/transBatch 方法可以翻译单个/多个 pojo,为了性能,TransService 不处理嵌套,
#比如User里套了个Org org里面的数据不会被翻译。
easy-trans.is-enable-global: true

 

五、字典数据初始化

import java.util.Map;
 
import javax.annotation.Resource;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
import com.fhs.trans.service.impl.DictionaryTransService;
 
 
@Component
public class TransJob {
 
    private static final Logger log = LoggerFactory.getLogger(TransJob.class);
    
    @Resource
    private SysDictService sysDictService;
    
    //注入字典翻译服务
    @Resource
    private  DictionaryTransService dictionaryTransService;
    
    @Scheduled(initialDelay = 3000, fixedRate = 5 * 60 * 1000)
    public void execute() {
        
        Long startTime = System.currentTimeMillis();
        try {
            dictionaryTransService.makeUseRedis();
            
            Map<String, Map<String, String>> datas = sysDictService.getDictMaps();
            
            if(datas != null && !datas.isEmpty()) {
                for (String key : datas.keySet()) {
                    dictionaryTransService.refreshCache(key, datas.get(key));
                }
            }
            
        } catch (Exception e) {
            BizException.error("TransJob更新字典缓存失败", e);
        }
        
        Long endTime = System.currentTimeMillis();
        
        log.info("TransJob更新字典缓存消耗时间为:{}", (endTime - startTime) + " ms");
    }
    
}

 

 

 

(时间宝贵,分享不易,捐赠回馈,^_^)

 

================================

©Copyright 蕃薯耀 2022-08-31

https://www.cnblogs.com/fanshuyao/

标签:翻译,Java,绑定,redis,private,easy,trans,com,字典
From: https://www.cnblogs.com/fanshuyao/p/16643674.html

相关文章

  • java实现kafka生产者消费者
    参考:https://blog.csdn.net/zhengzaifeidelushang/article/details/121984379深入浅出理解kafka原理系列之:java实现kafka消费者一、pom.xml引入kafka依赖二、kafka消费......
  • # JavaScript中的数组
    目录JavaScript中的数组数组的概念创建数组1.利用new创建数组2.利用数组字面量创建数组获取数组中的元素数组的索引数组遍历数组新增元素冒泡排序JavaScript中的数组数组......
  • java修饰符
    基本介绍:java提供了四种访问控制修饰符号,控制犯方法和属性(成员变量)的访问权限(范围)1、公开级别:用public修饰,绝对公开2、受保护级别:用protected修饰,对子类和同一个包中的......
  • Java15-File类、递归
    Java15【File类、递归】主要内容File类递归Lambda优化第一章File类1.1概述java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找......
  • IOS下无法获取到WebViewJavascriptBridge的问题排查
    问题描述在安卓下正常获取到WebViewJavascriptBridge,在IOS下一直无法获取到WebViewJavascriptBridge官网的示例如下:接手项目时已有的桥接代码:可以发现src不同,一个......
  • Java 修饰符
    访问控制修饰符Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。default (即默认,什么也不写):在同一包内可见,不使......
  • 7.8 字典的特点
     '''字典的值可以是相同的'''scores={'张三':100,'李四':100,'王五':100}print(scores['李四'])print(scores['张三'])'''字典的key不能是相同的'''scores1={'张......
  • JAVA面试题总结归纳
    问题一:JAVA的原始数据类型有哪些,它们的大小以及其对应的封装类是什么?数据类型对应大小对应的封装类boolean1bit,boolean类型单独使用是4个字节,而在数组中又是1个......
  • smile——Java机器学习引擎
    资源https://haifengl.github.io/https://github.com/haifengl/smile介绍Smile(统计机器智能和学习引擎)是一个基于Java和Scala的快速、全面的机器学习、NLP、线性代数、......
  • 【Java学习Day11】变量种类及命名规范
    变量变量是什么:就是可以变化的量Java是一种强类型语言,每个变量都必须声明其类型Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域typevarNa......