Update avaliable. Click RELOAD to update.
目录

一种 Key-Value 的数据表扩展字段 bizExtInfo 的存取方式

1. 背景

当在数据库中设计表结构时,通常会预留个 扩展字段(biz_ext_info),防止后续因需求变化导致模型频繁变更的问题,这个 扩展字段(biz_ext_info) 通常会设置较大的可变字符串,如下:

CREATE TABLE `xxxxxx` (
  ...
  ...
  `biz_ext_info` varchar(2000) DEFAULT NULL COMMENT '扩展信息',
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='xxxxxx'
;

大部分人的做法会存储 JSON 字符串,存取时都会有个 JSON 解析的过程,同时数据显示也并不直观,下面是通过一种方式让 扩展字段(biz_ext_info) 里存储的数据以一种 Key-Value 的方式存储。

biz_ext_info

如上图所示,当查看 bizExtInfo 时,就类似于表字段+值的方式,相对于 JSON字符串 在查看或者读取使用时将会方便很多。

2. 实现

主要通过两个方法实现:

2.1. 存储

在保存数据库对象,这里以 Record 举例,使用 map2string 方法,将 map 转成 string 存储到数据库中

Map<String, String> map = Maps.newHashMap();
map.put("FLAG", "1312");
map.put("AllowPAY", "CHB");
record.setBizExtInfo(MapUtil.map2string(map));

2.2. 读取

从数据库中读取出来,使用 string2map 转成 map,由于 Record 对象里 bizExtInfo 属性定义的是字符串类型,通常会在数据库对象 Record 类扩展一个方法,如 fetchBizExtInfo(String key)

public class Record {
    ......
    ......
    private String bizExtInfo;

    public String fetchBizExtInfo(String key) {
        Map<String, String> bizExtInfoMap = MapUtil.string2map(bizExtInfo);
        return bizExtInfoMap.get(key);
    }
}

3. 源码

版权所有,本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可。转载请注明出处:https://www.wangjun.dev//2024/07/kv-data-table-storage/