一、使用系统参数表的好处
以数据库表形式存储的系统参数表比配置文件(.properties文件或.yaml文件)要更灵活,因为无需重启系统就可以动态更新。
系统参数表可用于存储下列数据:
表字段枚举值,如下列字段:
`question_type` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '题型,1-单选题,2-多选题,3-问答题',
这个字段现在有3种取值,但是难保将来有扩展的可能,如:是非题、计算题、应用题等。
因此将取值的枚举值用系统参数表来配置,可以提高系统扩展灵活性。
另一方面,对于前端而言,就可以通过查询系统参数表数据,用于UI呈现,而不必硬编码。如前端需要用下拉框来显示所有可能的”题型“,这个列表就可以查询系统参数表来获取。
因此可以将所有字段枚举值纳入系统参数表管理。
参数设置,如邮件参数,对接的第三方系统的URL等。
二、系统参数表的表结构
系统参数表的表结构如下:
DROP TABLE IF EXISTS `sys_parameters`; CREATE TABLE `sys_parameters` ( `class_id` INT(11) NOT NULL DEFAULT 0 COMMENT '参数大类id', `class_key` VARCHAR(60) NOT NULL DEFAULT '' COMMENT '参数大类key', `class_name` VARCHAR(60) NOT NULL DEFAULT '' COMMENT '参数大类名称', `item_id` INT(11) NOT NULL DEFAULT 0 COMMENT '参数大类下子项id', `item_key` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '子项key', `item_value` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '子项值', `item_desc` VARCHAR(512) NOT NULL DEFAULT '' COMMENT '子项描述', -- 记录操作信息 `login_name` VARCHAR(80) NOT NULL DEFAULT '' COMMENT '操作人账号', `delete_flag` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '记录删除标记,1-已删除', `create_time` DATETIME NOT NULL DEFAULT NOW() COMMENT '创建时间', `update_time` DATETIME DEFAULT NULL ON UPDATE NOW() COMMENT '更新时间', PRIMARY KEY (`class_id`, `item_id`) ) <div>本文来源gaodai.ma#com搞##代!^码7网</div>ENGINE = InnoDB DEFAULT CHARSET = utf8 COMMENT '系统参数表';
说明:
class_id字段只要确保一个参数大类(如一个枚举字段名)使用唯一值。使用class_key和item_key自动,便于提高记录数据和代码的可读性。class_key一般可以取字段名,但如果发生同名时,需要修改,确保不同表的同名字段,使用不同的class_key。对于枚举值类型,item_key可以取item_id相同的值,只是数据类型不同,此item_key转换成整型数,就是对应字段的值。
这个表的数据一般可以由开发人员提供,包括初始或变动的SQL脚本,由DBA执行,项目无需为此开发界面来维护。
下面是初始脚本示例:
INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc) VALUES (11, 'receive_flag', '短信接收标志', 0, '0', '未接收', ''); INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc) VALUES (11, 'receive_flag', '短信接收标志', 1, '1', '已接收', ''); INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc) VALUES (11, 'receive_flag', '短信接收标志', 2, '2', '发送失败', ''); INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc) VALUES (12, 'question_type', '题型', 1, '1', '单选题', ''); INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc) VALUES (12, 'question_type', '题型', 2, '2', '多选题', ''); INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc) VALUES (12, 'question_type', '题型', 3, '3', '问答题', ''); INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc) VALUES (101, 'url_param', 'URL参数', 0, 'url_prefix', 'http://questinvest.abc.com:8880', 'url前缀部分'); INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc) VALUES (101, 'url_param', 'URL参数', 1, 'url_action', '/questInvest/show', '请求接口方法');