[java]数据字典封装

文章详细描述了两个数据库表sys_dict_type和sys_dict_data在系统中的结构,以及它们对应的实体类。重点介绍了如何通过序列化和RESTfulAPI在前端查询数据字典,以及项目启动时如何初始化字典容器。
摘要由CSDN通过智能技术生成

sys_dict_type 表用于存储数据字典类型。

CREATE TABLE `sys_dict_type` (
  `id` char(19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标识',
  `type_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典类型名称',
  `type_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典类型标识',
  `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典类型描述',
  `enable` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '是否启用',
  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
  `create_by` char(19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` char(19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

sys_dict_type 对应实体

@Data
@Data
public class SysDictType extends BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /** 标识 */
    @TableId(value = "id", type = IdType.ASSIGN_UUID)
    private String id;

    /** 字典类型名称 */
    private String typeName;

    /** 字典类型标识 */
    private String typeCode;

    /** 字典类型描述 */
    private String description;

    /** 状态 */
    private String status;

    /** 备注 */
    private String remark;

}

sys_dict_data 表用于存储字典数据,并与 sys_dict_type 表通过 type_code 关联。

CREATE TABLE `sys_dict_data` (
  `data_id` char(19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标识',
  `data_label` char(19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典标签',
  `data_value` char(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典值',
  `type_code` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '所属类型',
  `is_default` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '是否默认',
  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
  `enable` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '是否启用',
  `update_by` char(19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`data_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

sys_dict_data 对应实体

@Data
public class SysDictData extends BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /** 标识 */
    private String id;

    /** 字典标签 */
    private String dataLabel;

    /** 字典值 */
    private String dataValue;

    /** 所属类型 */
    private String typeCode;

    /** 是否默认 */
    private String isDefault;

    /** 是否启用 */
    private String status;

    /** 是否启用 */
    private String remark;

}

前端查询数据字典时,使用sysDict包装返回,如有修改,可以修改其属性

@Data
public class SysDict implements Serializable {
    private static final long serialVersionUID = 1L;

    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String typeName;

    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String typeCode;

    private String dictLabel;

    private String dictValue;

    private String dictTag;

    private String dictColor;

}

项目启动时,初始化字典容器

@Component
public class DictContainer {

    public static final Map<String, List<SysDict>> dictContainer = new HashMap<>();

    @Resource
    private SysDictTypeMapper sysDictTypeMapper;

    @PostConstruct
    public void init(){
        sysDictTypeMapper.selectList().forEach(sysDict -> {
            dictContainer.computeIfAbsent(sysDict.getTypeCode(),key -> new ArrayList<>()).add(sysDict);
        });
    }
}

前端查询接口

@RestController
@RequestMapping("common/dict")
public class DictController {

    @GetMapping("getByType")
    public Result getByType(@RequestParam String types) {
        List<String> typeList = Arrays.asList(types.split(","));
        //拿到字典
        Map<String, List<SysDict>> result = DictContainer.dictContainer.entrySet().stream()
                .filter(entry -> typeList.contains(entry.getKey()))
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
        //填充缺省值
        typeList.stream().forEach(type ->{
            result.computeIfAbsent(type,key -> new ArrayList<>());
        });
        return Result.success(result);
    }

}

如果不需要填充并不存在的类型,可以把缺省值代码删除

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值