• springboot 数据翻译:支持枚举翻译、字典翻译、外键翻译、级联翻译、方法翻译


     

    1. 数据翻译

            springboot 项目开发中常见到的数据翻译包括:

            枚举翻译、字典表翻译、外键翻译、级联字段翻译、远程调用翻译等。

     

    2. 数据来源

    • 枚举代码(枚举)
    • 数据表(字典表、关联表)
    • 自定义方法(本地处理,跨服务查询、第三方API查询等)

    这里通过定义3个注解来分别处理

    核心注解

    应用场景

    @TransEnum

    @TransEnum(dictType = "类型code", source = "变量名")

    说明:使用枚举翻译

    @TransDict

    @TransDict(dictType = "类型code", source = "源变量名")

    说明:优先使用枚举翻译,再使用字典表翻译;

    需要自定义实现接口 TransDictHandler,用于读取字典表翻译

    @TransSQL

    @TransSQL(selectSql = "select xx from xx where id=#{变量名}")

    说明:配置动态SQL,查询字典表、关联表进行翻译,支持Entity对象

    @TransClass

    @TransClass(catalog="类型code", service =XxxTransService.class)

    说明:用户自定义翻译代码,如访问http接口进行翻译

     

    3. 使用介绍

    @TransEnum

            说明:允许用户自定义枚举字典,要求枚举实现接口IDict,并添加 @DictType标识

    1. @Getter
    2. @Setter
    3. public class ProjectDTO implements Serializable {
    4. /* 应用状态:字典值 */
    5. private String status;
    6. /* 应用状态:字典名称 */
    7. @TransEnum(dictType = "project_status", orgFieldName = "status")
    8. private String statusDesc;
    9. /* 业务类型 sys_oper_type */
    10. private String operType;
    11. @TransDict(dictType = "sys_oper_type", source = "operType")
    12. private String operTypeDesc;
    13. }
    14. //定义一个枚举
    15. @DictType(value = "project_status", label = "应用状态")
    16. public enum ProjectStatusEnum implements IDict {
    17. no("未开始"),
    18. go("开发中"),
    19. check("验收中"),
    20. over("完成");
    21. private String label;
    22. ProjectStatusEnum(String label){
    23. this.label = label;
    24. }
    25. @Override
    26. public String getLabel() {
    27. return label;
    28. }
    29. @Override
    30. public Object getValue() {
    31. return name();
    32. }
    33. }

    @TransSQL

            说明:@TransSQL 参数selectSql可以使用动态变量 #{userName},  ${userId}

    1. @Getter
    2. @Setter
    3. public class ProjectDTO implements Serializable {
    4. /* 用户ID */
    5. private String userId;
    6. /* 用户名,从表sys_user中查询用户名后回填*/
    7. @TransSQL(selectSql = "select user_name from sys_user where id=#{userId}")
    8. private String userName;
    9. /* 应用状态值:字典值 project_status */
    10. private String status;
    11. /* 应用状态名:从表sys_dict_data中查询数据回填 */
    12. @TransSQL(selectSql = "select dict_label from sys_dict_data where dict_type='project_status' and dict_value=#{status}")
    13. private String statusDesc;
    14. }

    @TransClass

            说明:@TransClass用于需要经过复杂计算得到的数据回填,需要用户自定义实现接口 ITransService

    1. @Getter
    2. @Setter
    3. public class ProjectDTO implements Serializable {
    4. //获取当前租户ID
    5. @TransClass(catalog="", service = TenantTransService.class)
    6. private String tenantId;
    7. }
    8. @Component
    9. public class TenantTransService implements TransClassService {
    10. @Autowired
    11. private BaseSessionService sessionService;
    12. @Override
    13. public void handField(String catalog, Object object, Field field, Map example) {
    14. String fieldName = field.getName();
    15. if("tenantId".equals(fieldName)){
    16. String tenantId = sessionService.getTenantId();
    17. BeanMap.create(object).put(fieldName, tenantId);
    18. }
    19. }
    20. }

    手动调用

    1. @RestController
    2. @RequestMapping("/project")
    3. @Slf4j
    4. public class ProjectController {
    5. @Autowired
    6. private ProjectService projectService;
    7. @Autowired
    8. private EasyTransService transService;
    9. /**
    10. * Get localhost:9501/project/listByGroup/{groupId}
    11. * @param groupId
    12. * @return
    13. */
    14. @ApiOperation(value = "查询应用列表(分组下)")
    15. @GetMapping("/listByGroup/{groupId}")
    16. public Result listByGroup(@PathVariable String groupId) {
    17. List list = this.projectService.listByGroup(groupId);
    18. //翻译属性
    19. transService.transBatch(list);
    20. return Result.ok(list);
    21. }
    22. }

    4. 引入jar

    maven 依赖方式:将 jar 放在/libs目录下,配置如下
    
        com.geline.cloud
        coder-sdk-easy-trans
        system
        1.3.0
        ${project.basedir}/libs/coder-sdk-easy-trans-1.3.0.jar
    

    gradle 依赖方式:将 jar 放在/libs目录下,配置如下

        compile fileTree(dir: 'libs', includes: ['*jar'])

     

    源代码地址:https://gitee.com/cloud-coder/coder-sdk-easy-trans

     

  • 相关阅读:
    【Python 逆向滑块】(实战五)逆向滑块,并实现用Python+Node.js 生成滑块、识别滑块、验证滑块、发送短信
    ubantu搭建cdh6(自己留的草稿版本)
    5.git远程仓库的创建(http,ssh)
    30天Python入门(第二十天:深入了解Python中的pip)
    经管博士科研基础【27】如何判断正定矩阵或者负定矩阵?
    React 函数组件
    Java基础:throw和throws的详解
    Linux内核子系统 内核配置选项
    docker基础命令
    leetcode:45. 跳跃游戏II
  • 原文地址:https://blog.csdn.net/mxskymx/article/details/133465638