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实现消息过滤功能

    这篇文章主要介绍了Spring?Boot?整合RocketMq实现消息过滤,本文讲解了RocketMQ实现消息过滤,针对不同的业务场景选择合适的方案即可,需要的朋友可以参考下
    2022-06-06
  • Java空集合使用场景与填坑记录

    Java空集合使用场景与填坑记录

    这篇文章主要给大家介绍了关于Java空集合使用场景与填坑的相关资料,并且给大家介绍了java判断集合是否为空的方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-08-08
  • ReentrantLock条件变量使多个线程顺序执行

    ReentrantLock条件变量使多个线程顺序执行

    这篇文章主要为大家介绍了ReentrantLock条件变量使多个线程顺序执行,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 详解SpringCloud微服务之Rest

    详解SpringCloud微服务之Rest

    今天带大家学习SpringCloud微服务之Rest的有关知识,文中有非常详细的介绍及代码示例,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • 分享5个Java接口性能提升的通用技巧

    分享5个Java接口性能提升的通用技巧

    作为后端开发人员,我们总是在编写各种API。这些API在服务初期可能表现不错,但随着用户数量的增长,一开始响应很快的API越来越慢,这时候你就需要考虑如何优化你的API性能了。在这篇文章中,我总结了一些行之有效的API性能优化技巧,希望能给有需要的朋友一些帮助
    2023-01-01
  • Springboot apollo原理及使用方法详解

    Springboot apollo原理及使用方法详解

    这篇文章主要介绍了Springboot apollo原理及使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Java实现监听文件变化的三种方案详解

    Java实现监听文件变化的三种方案详解

    这篇文章主要介绍了Java实现监听文件变化的三种方法,每种方案给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Spring Boot 端口被占用的解决方法

    Spring Boot 端口被占用的解决方法

    这篇文章主要介绍了解决 Spring Boot 端口被占用的方法详解,通过本文的介绍,你学习了如何解决 Spring Boot 端口被占用的问题。你了解了检查端口是否被占用、停止占用端口的进程、更改应用程序的端口号以及检查应用程序间的端口冲突等方法,需要的朋友可以参考下
    2023-07-07
  • SpringBoot使用Druid数据源的配置方法

    SpringBoot使用Druid数据源的配置方法

    这篇文章主要介绍了SpringBoot使用Druid数据源的配置方法,文中代码实例相结合的形式给大家介绍的非常详细,需要的朋友参考下吧
    2018-04-04
  • Maven 搭建开发环境

    Maven 搭建开发环境

    这篇文章主要介绍了Maven 如何搭建开发环境,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07

最新评论

?


http://www.vxiaotou.com