Mybatis如何動態(tài)創(chuàng)建表
背景
項目中涉及存儲數(shù)據(jù)量過大,會導致數(shù)據(jù)讀取慢等問題,所以考慮動態(tài)創(chuàng)建表來存儲數(shù)據(jù)。
↓
這里場景動態(tài)創(chuàng)建表,而且字段是不固定的。表名和字段對應關系存儲在單張表中!
解釋
創(chuàng)建表涉及到數(shù)據(jù)類型、存儲長度等,這里可以根據(jù)個人業(yè)務設置、或者固定
使用Mybatis 動態(tài)sql,傳入對應的數(shù)據(jù)類型來實現(xiàn)動態(tài)創(chuàng)建表
注意點:
這里簡單說下表名、字段等規(guī)范
- 1.因為我這里表名也是動態(tài)生成,不建議純數(shù)字,否者插入時,表名需添加~~(Table鍵上面),可以拼接字符前綴
- 2.建表時建議采用innodb引擎,一般情況。
- 3.數(shù)據(jù)類型的話,根據(jù)業(yè)務場景來,我這里就是int、varchar、datetime三種類型
具體實現(xiàn)
1、拼接每個字段對應數(shù)據(jù)類型、長度、默認值等
對應數(shù)據(jù)也可以全varchar,根據(jù)業(yè)務需求
for (TemplateField field : fields) {
TableParam tableParam2 = new TableParam();
tableParam2.setField(field.getDataIndex())
.setContent(field.getTitle());
if ("1".equals(field.getDataType())) {
tableParam2.setType(" varchar(255) ")
.setAttribute(" CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ");
}
if ("2".equals(field.getDataType())) {
tableParam2.setType(" int(10) ")
.setAttribute(" NULL DEFAULT NULL ");
}
if ("3".equals(field.getDataType())) {
tableParam2.setType(" datetime(0) ")
.setAttribute(" NULL DEFAULT NULL ");
}
tableParamList.add(tableParam2);
}
2、對應mapper,sql語句
<!--創(chuàng)建表-->
<update id="createTable" parameterType="java.util.List" statementType="STATEMENT">
CREATE TABLE `${tableName}`
(
<foreach collection="tableParams" separator="," item="item">
`${item.field}` ${item.type} ${item.attribute} COMMENT '${item.content}'
</foreach>
${key}
)
ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '模板對應數(shù)據(jù)填報表' ROW_FORMAT = Dynamic;
</update>
到此,Mybatis動態(tài)創(chuàng)建表就可以了!
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java?EasyExcel實現(xiàn)合并相同內容單元格與動態(tài)標題功能
這篇文章主要為大家詳細介紹了Java?EasyExcel如何實現(xiàn)合并相同內容單元格與動態(tài)標題功能,文中的示例代碼講解詳細,有需要的小伙伴可以參考下2023-12-12
Java利用Socket和IO流實現(xiàn)文件的上傳與下載
本文主要介紹了Java利用Socket和IO流實現(xiàn)文件的上傳與下載,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04
java根據(jù)開始時間結束時間計算中間間隔日期的實例代碼
這篇文章主要介紹了java根據(jù)開始時間結束時間計算中間間隔日期的實例代碼,需要的朋友可以參考下2019-05-05
解決IDEA使用Spring Initializr創(chuàng)建項目時無法連接到https://start.spring.io的問
這篇文章主要介紹了解決IDEA使用Spring Initializr創(chuàng)建項目時無法連接到https://start.spring.io的問題,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
Java使用Curator進行ZooKeeper操作的詳細教程
Apache Curator 是一個基于 ZooKeeper 的 Java 客戶端庫,它極大地簡化了使用 ZooKeeper 的開發(fā)工作,在分布式系統(tǒng)中,ZooKeeper 通常被用來作為協(xié)調服務,而 Curator 則為我們提供了更簡潔易用的接口,本文將介紹 Curator 的核心功能及實踐樣例,需要的朋友可以參考下2025-04-04

