前言
一个需求是这样的:查询日报需要返回的参数字段未定,字段可能会进行变动。思路:
1.常规想法:基于数据库表进行实体映射,发生改动之后同步代码改动。2.My Idea:利用数据库表的系统表,只需要获取对应数据库中配置好的字段,配置什么我存储什么数据结果即可。
实践:
// SQL如下:
SELECT
COLUMN_NAME
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_SCHEMA = 'bsd_thirddata'
AND TABLE_NAME = 't_tencent_daily_report';
// 把日报数据写入MySQL
// 动态获取所有的MySQL中配置好的字段
String filedSql = getFiledSql();
List<String> filedStr = namedParameterJdbcTemplate.queryForList(filedSql, Maps.newHashMap(), String.class);
List<Map<String, Object>> insertList = Lists.newArrayList();
// 遍历结果集进行存储数据
reportList.forEach(item -> {
Map<String, Object> dataMap = Maps.newHashMap();
dataMap.put("agency_id", agencyId);
filedStr.forEach(filed -> {
if (item.containsKey(filed)) {
dataMap.put(filed, item.get(filed));
}
});
insertList.add(dataMap);
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25