项目中需要java后台查询并组装前台grid的数据,数据行数不定,数据行定义不定,开始用了最原始的方法,写了几百行,就是前台需要什么字段后台拼接什么字段,java代码冗余量非常大,并且不够灵活,一旦前台页面需要调整字段顺序或者增加一个字段、删除一个字段时,后台需要修改java代码。经过一上午的重构努力,改为数据库配置字段与字段对应方法,java利用反射动态调用对象方法从而获取字段值,拼接为list传递给前台。这样修改后,代码干净整洁,非常灵活,只要是对象中存在的方法,可以在数据库中任意配置显示与否、显示顺序等,现在分别介绍下实现过程:
一、数据库定义
CREATE TABLE `IS_WEB_TABLECONF` (
`guid` bigint(20) NOT NULL,
`columnname` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,--字段在页面的显示名称
`language` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,--字段的反射方法
`columnmethodname` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`orderstr` int(10) DEFAULT NULL,--字段在页面的显示顺序
`tablename` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,--表单名称
`modulename` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,--模块名称
PRIMARY KEY (`guid`) USING BTREE
) ENGINE = InnoDB CHaraCTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
`guid` bigint(20) NOT NULL,
`columnname` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,--字段在页面的显示名称
`language` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,--字段的反射方法
`columnmethodname` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`orderstr` int(10) DEFAULT NULL,--字段在页面的显示顺序
`tablename` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,--表单名称
`modulename` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,--模块名称
PRIMARY KEY (`guid`) USING BTREE
) ENGINE = InnoDB CHaraCTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of IS_WEB_TABLECONF
-- ----------------------------
INSERT INTO `IS_WEB_TABLECONF` VALUES (1,‘公司名称:‘,‘zh-ch‘,‘getBranchName‘,1,b‘0‘,23,‘2019-09-18 10:44:32‘,‘2019-09-18 10:44:30‘,12,‘WebInstallation‘,‘BaseInfo‘);
INSERT INTO `IS_WEB_TABLECONF` VALUES (2,‘初始分公司:‘,‘getProtocolStartDate‘,2,345,‘2019-09-18 10:45:48‘,‘2019-09-18 10:45:50‘,4,‘BaseInfo‘);
-- Records of IS_WEB_TABLECONF
-- ----------------------------
INSERT INTO `IS_WEB_TABLECONF` VALUES (1,‘公司名称:‘,‘zh-ch‘,‘getBranchName‘,1,b‘0‘,23,‘2019-09-18 10:44:32‘,‘2019-09-18 10:44:30‘,12,‘WebInstallation‘,‘BaseInfo‘);
INSERT INTO `IS_WEB_TABLECONF` VALUES (2,‘初始分公司:‘,‘getProtocolStartDate‘,2,345,‘2019-09-18 10:45:48‘,‘2019-09-18 10:45:50‘,4,‘BaseInfo‘);
二、java中根据不同模块查询对应的表格定义,组装数据
private void getListInfo(String licenseClassName,List qualifyList,Object dto,String qualifyInfo) {
//licenseClassName需要反射对象的类路径名称,如:
"com.neuxa.is.isinterface.fm.dto.IsSlInstallationunitReviewDto"
//dto是查询好带有数据信息的对象实体
List<IsWebTableconfdto> tableConfQua = dictionaryUtil.getTableConf("WebInstallation",qualifyInfo);
for (IsWebTableconfdto confdto : tableConfQua) {
JSONObject object = new JSONObject();
object.put("key",confdto.getColumnname());
String value = "";
value = getInvokeMethodValue(licenseClassName,confdto.getColumnmethodname(),dto);
object.put("value",value);
qualifyList.add(object);
}
private String getInvokeMethodValue(String classBeanName,String methodName,Object curDto){ String value=""; try { Class<?> clazz = Class.forName(classBeanName); Method method = clazz.getDeclaredMethod(methodName); method.setAccessible(true); Object invoke = method.invoke(curDto); value=invoke.toString(); }catch(Exception e){ e.printstacktrace(); } return value;}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。