小生姓韩,欢迎你的来访

vuePress-theme-reco 小韩    2024 - 2025
小生姓韩,欢迎你的来访 小生姓韩,欢迎你的来访
主页
内容分类
  • Bug解决
  • Linux相关
  • Java基础
  • Java开发细节
  • 项目部署
涵盖属性
推荐阅览
  • 《基于云效Codeup的自动化部署(前端)》
  • 《基于云效Codeup的自动化部署(后端)》
  • 《XXL-JOB项目部署搭建》
时间轴
关于
author-avatar

小韩

21

文章

26

标签

主页
内容分类
  • Bug解决
  • Linux相关
  • Java基础
  • Java开发细节
  • 项目部署
涵盖属性
推荐阅览
  • 《基于云效Codeup的自动化部署(前端)》
  • 《基于云效Codeup的自动化部署(后端)》
  • 《XXL-JOB项目部署搭建》
时间轴
关于

基于MySQL数据库的动态字段获取并存储

vuePress-theme-reco 小韩    2024 - 2025

基于MySQL数据库的动态字段获取并存储

小韩 2025-02-20 JavaMySQL

前言

一个需求是这样的:查询日报需要返回的参数字段未定,字段可能会进行变动。

思路:

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

结语

避免机械性重复代码开发,减少冗余工作量,拓宽思维想法。
欢迎来到 小生姓韩,欢迎你的来访
看板娘