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


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

    ©Copyright 蕃薯耀 2022-08-30

    蕃薯耀的博客_CSDN博客-蕃薯耀分享,java,js领域博主

    一、引入Maven依赖

    基于3.4.3.3实现

    1. <dependency>
    2. <groupId>com.baomidougroupId>
    3. <artifactId>mybatis-plus-boot-starterartifactId>
    4. <version>${mybatisPlus.version}version>
    5. dependency>
    6. <dependency>
    7. <groupId>com.baomidougroupId>
    8. <artifactId>mybatis-plus-generatorartifactId>
    9. <version>${mybatisPlusGenerator.version}version>
    10. <scope>providedscope>
    11. dependency>
    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-data-redisartifactId>
    4. dependency>
    5. <dependency>
    6. <groupId>com.fhs-opensourcegroupId>
    7. <artifactId>easy-trans-spring-boot-starterartifactId>
    8. <version>2.0.2version>
    9. <exclusions>
    10. <exclusion>
    11. <groupId>com.baomidougroupId>
    12. <artifactId>mybatis-plus-annotationartifactId>
    13. exclusion>
    14. exclusions>
    15. dependency>
    16. <dependency>
    17. <groupId>com.fhs-opensourcegroupId>
    18. <artifactId>easy-trans-mybatis-plus-extendartifactId>
    19. <version>2.0.2version>
    20. <exclusions>
    21. <exclusion>
    22. <groupId>com.baomidougroupId>
    23. <artifactId>mybatis-plus-coreartifactId>
    24. exclusion>
    25. <exclusion>
    26. <groupId>com.baomidougroupId>
    27. <artifactId>mybatis-plus-extensionartifactId>
    28. exclusion>
    29. exclusions>
    30. dependency>
    31. <dependency>
    32. <groupId>commons-beanutilsgroupId>
    33. <artifactId>commons-beanutilsartifactId>
    34. <version>1.9.4version>
    35. dependency>

    不要漏了:commons-beanutils

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

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

    排除 mybatis-plus-annotation

    1. <dependency>
    2. <groupId>com.fhs-opensourcegroupId>
    3. <artifactId>easy-trans-spring-boot-starterartifactId>
    4. <version>2.0.2version>
    5. <exclusions>
    6. <exclusion>
    7. <groupId>com.baomidougroupId>
    8. <artifactId>mybatis-plus-annotationartifactId>
    9. exclusion>
    10. exclusions>
    11. dependency>

    二、application.properties 配置

    1、Redis配置

    1. spring.redis.host=192.168.11.210
    2. spring.redis.port=6379
    3. spring.redis.database=0
    4. #spring.redis.password=
    5. spring.redis.timeout=3000

    2、easy-trans配置

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

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

    4、其它使用情形

    1. //实现TransPojo 接口,代表这个类需要被翻译或者被当作翻译的数据源
    2. public class Student implements TransPojo {
    3. // 字典翻译 ref为非必填
    4. @Trans(type = TransType.DICTIONARY,key = "sex",ref = "sexName")
    5. private Integer sex;
    6. //这个字段可以不写,实现了TransPojo接口后有一个getTransMap方法,sexName可以让前端去transMap取
    7. private String sexName;
    8. //SIMPLE 翻译,用于关联其他的表进行翻译 schoolName 为 School 的一个字段
    9. @Trans(type = TransType.SIMPLE,target = School.class,fields = "schoolName")
    10. private String schoolId;
    11. //远程翻译,调用其他微服务的数据源进行翻译
    12. @Trans(type = TransType.RPC,targetClassName = "com.fhs.test.pojo.School",fields = "schoolName",serviceName = "easyTrans",alias = "middle")
    13. private String middleSchoolId;
    14. // 枚举翻译,返回文科还是理科给前端
    15. @Trans(type=TransType.ENUM,key = "desc")
    16. private StudentType studentType = StudentType.ARTS;
    17. public static enum StudentType{
    18. ARTS("文科"),
    19. SCIENCES("理科");
    20. private String desc;
    21. StudentType(String desc){
    22. this.desc = desc;
    23. }
    24. }
    25. }

    四、Controller方法添加 @TransMethodResult 注解

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

    1. @TransMethodResult
    2. @RequestMapping("/queryForPageVO")
    3. public Result queryForPage(@RequestBody Page page,
    4. @RequestBody WarehousePrincipalVO params) {
    5. return Result.ok(warehousePrincipalService.queryForPageVO(page, params));
    6. }

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

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

    五、字典数据初始化

    1. import java.util.Map;
    2. import javax.annotation.Resource;
    3. import org.slf4j.Logger;
    4. import org.slf4j.LoggerFactory;
    5. import org.springframework.scheduling.annotation.Scheduled;
    6. import org.springframework.stereotype.Component;
    7. import com.fhs.trans.service.impl.DictionaryTransService;
    8. @Component
    9. public class TransJob {
    10. private static final Logger log = LoggerFactory.getLogger(TransJob.class);
    11. @Resource
    12. private SysDictService sysDictService;
    13. //注入字典翻译服务
    14. @Resource
    15. private DictionaryTransService dictionaryTransService;
    16. @Scheduled(initialDelay = 3000, fixedRate = 5 * 60 * 1000)
    17. public void execute() {
    18. Long startTime = System.currentTimeMillis();
    19. try {
    20. dictionaryTransService.makeUseRedis();
    21. Map> datas = sysDictService.getDictMaps();
    22. if(datas != null && !datas.isEmpty()) {
    23. for (String key : datas.keySet()) {
    24. dictionaryTransService.refreshCache(key, datas.get(key));
    25. }
    26. }
    27. } catch (Exception e) {
    28. BizException.error("TransJob更新字典缓存失败", e);
    29. }
    30. Long endTime = System.currentTimeMillis();
    31. log.info("TransJob更新字典缓存消耗时间为:{}", (endTime - startTime) + " ms");
    32. }
    33. }

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

    ©Copyright 蕃薯耀 2022-08-30

    蕃薯耀的博客_CSDN博客-蕃薯耀分享,java,js领域博主

  • 相关阅读:
    Python 实现动态解析阿里云DNS记录
    Node.js(3)-Buffer对象
    远程调试环境配置
    如何备战Shopee大促活动?有什么技巧?
    郭晶晶家的象棋私教,好家伙是个机器人
    网络战争升级:横向渗透vs纵向渗透,谁才是真正的黑客大师
    Spring MVC的常用注解及用法
    Untiy 一个有意思的透视Shader
    init进程 和 终端进程的关系
    Ceph入门到精通-高功性能文件系统hpfs
  • 原文地址:https://blog.csdn.net/w995223851/article/details/126598832