Mybatis如何动态创建表
更新时间:2024年04月03日 09:51:07 作者:白面小生
这篇文章主要介绍了Mybatis如何动态创建表问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud)
(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun)
背景
项目中涉及存储数据量过大,会导致数据读取慢等问题,所以考虑动态创建表来存储数据。
↓
这里场景动态创建表,而且字段是不固定的。表名和字段对应关系存储在单张表中!
解释
创建表涉及到数据类型、存储长度等,这里可以根据个人业务设置、或者固定
使用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动态创建表就可以了!
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持程序员之家。
相关文章
Spring?Boot?整合RocketMq实现消息过滤功能
这篇文章主要介绍了Spring?Boot?整合RocketMq实现消息过滤,本文讲解了RocketMQ实现消息过滤,针对不同的业务场景选择合适的方案即可,需要的朋友可以参考下2022-06-06
最新评论