背景:

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

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

解释:

创建表涉及到数据类型、存储长度等,这里可以根据个人业务设置、或者固定
使用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动态创建表就可以了!

–End

Mybatis动态创建表相关推荐

  1. mysql 存储过程 动态建表_MySQL存储过程动态创建表,数据分表

    BEGIN DECLARE `@i` int(11); DECLARE `@siteCount` int(11); DECLARE `@sqlstr` VARCHAR(2560); DECLARE ` ...

  2. (解题思路)Entity Framework 如动态创建表或者列

    1.数据库中建立关于表结构信息的视图.(这个完全可以做到) 2.根据视图信息动态生成(内存.文件)edmx信息,根据edmx信息动态生成ObjectContext内容. 3.动态编译edmx及Obje ...

  3. mybatis动态调用表名和字段名

    一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这 ...

  4. python动态生成数据库表_Python-Flask:动态创建表的示例详解

    今天小编从项目的实际出发,由于项目某一个表的数据达到好几十万条,此时数据的增删查改会很慢:为了增加提高访问的速度,我们引入动态创建表. 代码如下: from app_factory import ap ...

  5. mybatis获取表名——mybatis动态调用表名和字段名#{},${}

    一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这 ...

  6. Mysql之存储过程,动态创建表和数据库-,动态删除-yellowcong

    今天在弄mycat 的时候,有一个需求,就是创建12个数据库,然后数据库里面都创建一个表,我当时想象,这个玩意也不难,于是寻思通过存储过程来动态创建表,只需要传递进来数据的前缀名称和表名称,即可创建1 ...

  7. mysql 动态 建表,mysql数据库动态创建表的实例分享

    摘要 腾兴网为您分享:mysql数据库动态创建表的实例分享,易视云3,完美root,刷机大师,手游宝等软件知识,以及清仓兔,找明星,爱普生1500w,txt完结小说全本软件,windows自带画图软件 ...

  8. 【MyBatis】myBatis动态传入表名进行查询

    由于分表就涉及到了有相近查询语句只是表名不同的情况,刚开始使用了 <select id="selectById" resultMap="BaseResultMap& ...

  9. android sqlite动态创建表,QT下如何实现SQLite动态创建表

    网上有很多人问sqlite动态创建多个表的问题,但几乎没有人给出满意的答案,事实上在QT环境下利用类QString很简单就能做到: 1.建立一个存储表名的QString 变量: QString nam ...

最新文章

  1. 三星emcp型号详解_嵌入式存储产品发展趋势:uMCP取代eMCP序幕拉开
  2. 回过头来看对象的四种状态强软弱虚引用的理解
  3. Android中在使用Room时提示:Cannot figure out how to save this field into database. You can consider adding a
  4. COLINUX的安装与网络配置
  5. 快速解读linq语法
  6. 使用smokeping监测网络
  7. Party(HDU-3062)
  8. 虚拟机是怎么实现的?(转)
  9. c语言初步经典题4----求圆柱体的表面积
  10. 54张扑克牌,除去两张大小王剩下52张扑克牌。问红桃A和黑桃A同时被一个人拿到的概率是多少?
  11. PXE网络启动 windows PE (使用微软官方工具)
  12. 程序员干累了,当个培训讲师?我亲身试水,讲讲感受
  13. Response学习
  14. [源码和文档分享]基于C#实现的RPG角色扮演类小游戏
  15. 算法设计 - 01背包问题的状态转移方程优化,以及完全背包问题
  16. DNS正向解析与反向解析
  17. Pycharm配置——解释器(interpreter)
  18. CPP学习之string类的讲解
  19. 计算机专业毕业设计大纲,附源码+论文+答辩
  20. 【PAT乙级】换个格式输出整数

热门文章

  1. 简单密码/华为机试(C/C++)
  2. mysql数据库 mdf 文件_如何连接到MDF数据库文件?
  3. 阿里P8大牛亲自教你!树莓派docker
  4. 关于emjoy表情在android5.x以上系统触发jni错误的修改(基于cocos2dx2.1.5修改)
  5. 关于部分VPython差异
  6. dw在php图片滑动切换效果,超简单的图片左右切换滑动
  7. STS报错“HttpServlet cannot be resolved to a type”
  8. 机器学习-机器学习之集成学习(ensemble learning)
  9. python基础课程学习笔记-第二节课
  10. ubuntu下 vscode 配置c++ 环境和opencv