当前位置: 代码网 > it编程>编程语言>Java > Mybatis如何动态创建表

Mybatis如何动态创建表

2024年05月15日 Java 我要评论
背景项目中涉及存储数据量过大,会导致数据读取慢等问题,所以考虑动态创建表来存储数据。↓这里场景动态创建表,而且字段是不固定的。表名和字段对应关系存储在单张表中!解释创建表涉及到数据类型、存储

背景

项目中涉及存储数据量过大,会导致数据读取慢等问题,所以考虑动态创建表来存储数据。

这里场景动态创建表,而且字段是不固定的。表名和字段对应关系存储在单张表中!

解释

创建表涉及到数据类型、存储长度等,这里可以根据个人业务设置、或者固定

使用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动态创建表就可以了!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com