Mybatis如何动态创建表
背景
项目中涉及存储数据量过大,会导致数据读取慢等问题,所以考虑动态创建表来存储数据。
↓
这里场景动态创建表,而且字段是不固定的。表名和字段对应关系存储在单张表中!
解释
创建表涉及到数据类型、存储长度等,这里可以根据个人业务设置、或者固定
使用Mybatis 动态sql,传入对应的数据类型来实现动态创建表
注意点:
这里简单说下表名、字段等规范
- 1.因为我这里表名也是动态生成,不建议纯数字,否者插入时,表名需添加~~(Table键上面),可以拼接字符前缀
- 2.建表时建议采用innodb引擎,一般情况。
- 3.数据类型的话,根据业务场景来,我这里就是int、varchar、datetime三种类型
具体实现
1、拼接每个字段对应数据类型、长度、默认值等
对应数据也可以全varchar,根据业务需求
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语句
<!--创建表-->
<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 = '模板对应数据填报表' ROW_FORMAT = Dynamic;
</update>
到此,Mybatis动态创建表就可以了!
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Java EasyExcel实现合并相同内容单元格与动态标题功能
这篇文章主要为大家详细介绍了Java EasyExcel如何实现合并相同内容单元格与动态标题功能,文中的示例代码讲解详细,有需要的小伙伴可以参考下2023-12-12
解决IDEA使用Spring Initializr创建项目时无法连接到https://start.spring.io的问
这篇文章主要介绍了解决IDEA使用Spring Initializr创建项目时无法连接到https://start.spring.io的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-04-04
Java使用Curator进行ZooKeeper操作的详细教程
Apache Curator 是一个基于 ZooKeeper 的 Java 客户端库,它极大地简化了使用 ZooKeeper 的开发工作,在分布式系统中,ZooKeeper 通常被用来作为协调服务,而 Curator 则为我们提供了更简洁易用的接口,本文将介绍 Curator 的核心功能及实践样例,需要的朋友可以参考下2025-04-04


最新评论