java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Mybatis动态创建表

Mybatis如何动态创建表

作者:白面小生

这篇文章主要介绍了Mybatis如何动态创建表问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

背景

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

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

解释

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

使用Mybatis 动态sql,传入对应的数据类型来实现动态创建表

注意点:

这里简单说下表名、字段等规范

具体实现

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文