mybatis 操作 mysql 动态创建数据表
Map 数据一般是根据需求生成的,例如 map.put("ticketId",176),map.put("ticketName","测试工单")
这样遍历处理的 Map 生成的表包含的字段:id ticket_id ticket_name
//动态创建数据表,由于数据表字段是下划线,所以要把驼峰的 map 中的 key 先转为下划线
HashMap<String, Object> transitionMap = humpToUnderline(ticketIdAndRemark.get(0));
StringBuilder stringBuilderHashKey = new StringBuilder();
// 获取 key
for (HashMap.Entry<String, Object> entry : transitionMap.entrySet()) {
if (entry.getKey().contains("remark")) {
stringBuilderHashKey.append("`").append(entry.getKey()).append("`").append("longtext DEFAULT NULL").append(",");
} else {
stringBuilderHashKey.append("`").append(entry.getKey()).append("`").append("varchar(200) DEFAULT NULL").append(",");
}
}
String tableString = stringBuilderHashKey.toString();
//判断表是否存在,存在:先删除在创建,不存在:创建表
int count = reportAllSqlMapper.existTable(tableName);
if (0 != count) {
//TODO 不一定要截断表,目前是截断。考虑点:表数据不截断就会太大了。到时候只能分批处理,或者按时间处理
reportAllSqlMapper.dropTable(tableName);
}
reportAllSqlMapper.createTable(tableName, tableString);
/**
* 把 map 中的 key 由驼峰命名转为下划线
*/
public HashMap<String, Object> humpToUnderline(HashMap<String, Object> map) {
HashMap<String, Object> transitionMap = new HashMap<>(16);
map.forEach((k, v) -> transitionMap.put(StrUtil.toUnderlineCase(k), v));
return transitionMap;
}
作者:天下没有收费的bug
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。