目录
一种 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 的方式存储。
如上图所示,当查看 bizExtInfo 时,就类似于表字段+值的方式,相对于 JSON字符串 在查看或者读取使用时将会方便很多。
2. 实现
主要通过两个方法实现:
- public static String map2string(Map<String, String> map)
- public static Map<String, String> string2map(String str)
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/