1. 程式人生 > 其它 >mybatis 操作 mysql 動態建立資料表

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 出處:https://www.cnblogs.com/LoveBB/ 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須在文章頁面給出原文連結,否則保留追究法律責任的權利。