Mybatis如何动态创建表

 更新时间:2024年04月03日 09:51:07   作者:白面小生  
这篇文章主要介绍了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中stream处理中map与flatMap的比较和使用案例

    Java中stream处理中map与flatMap的比较和使用案例

    这篇文章主要介绍了Java中stream处理中map与flatMap的比较和使用案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java之打印String对象的地址

    Java之打印String对象的地址

    这篇文章主要介绍了Java之打印String对象的地址,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Java Agent探针技术详解示例

    Java Agent探针技术详解示例

    这篇文章主要介绍了Java Agent 探针技术详情,Java 中的 Agent 技术可以让我们无侵入性的去进行代理,最常用于程序调试、热部署、性能诊断分析等场景,下文更多相关资料,感兴趣的小伙伴可以参考一下
    2022-06-06
  • mongo分布式锁Java实现方法(推荐)

    mongo分布式锁Java实现方法(推荐)

    下面小编就为大家带来一篇mongo分布式锁Java实现方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • springboot配置文件中属性变量引用方式@@解读

    springboot配置文件中属性变量引用方式@@解读

    这篇文章主要介绍了springboot配置文件中属性变量引用方式@@解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Java基于面向对象实现一个战士小游戏

    Java基于面向对象实现一个战士小游戏

    这篇文章主要为大家详细介绍了Java如何基于面向对象实现一个战士小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以动手尝试一下
    2022-07-07
  • Springboot从配置文件properties读取字符串乱码的解决

    Springboot从配置文件properties读取字符串乱码的解决

    这篇文章主要介绍了Springboot从配置文件properties读取字符串乱码的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Spring cloud 查询返回广告创意实例代码

    Spring cloud 查询返回广告创意实例代码

    在本篇文章里小编给大家整理的是关于Spring cloud 查询返回广告创意实例代码,需要的朋友们可以跟着学习下。
    2019-08-08
  • Springboot之修改启动端口的两种方式(小结)

    Springboot之修改启动端口的两种方式(小结)

    这篇文章主要介绍了Springboot之修改启动端口的两种方式(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 关于在Springboot中集成unihttp后应用无法启动的解决办法

    关于在Springboot中集成unihttp后应用无法启动的解决办法

    本文主要介绍了在SpringBoot项目中集成UniHttp框架时遇到的无法启动问题,并提供了解决方法,作者通过详细记录和分析问题,希望为其他开发者提供有价值的参考和借鉴,感兴趣的朋友跟随小编一起看看吧
    2025-03-03

最新评论