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动态创建表就可以了!
–End
Mybatis动态创建表相关推荐
- mysql 存储过程 动态建表_MySQL存储过程动态创建表,数据分表
BEGIN DECLARE `@i` int(11); DECLARE `@siteCount` int(11); DECLARE `@sqlstr` VARCHAR(2560); DECLARE ` ...
- (解题思路)Entity Framework 如动态创建表或者列
1.数据库中建立关于表结构信息的视图.(这个完全可以做到) 2.根据视图信息动态生成(内存.文件)edmx信息,根据edmx信息动态生成ObjectContext内容. 3.动态编译edmx及Obje ...
- mybatis动态调用表名和字段名
一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这 ...
- python动态生成数据库表_Python-Flask:动态创建表的示例详解
今天小编从项目的实际出发,由于项目某一个表的数据达到好几十万条,此时数据的增删查改会很慢:为了增加提高访问的速度,我们引入动态创建表. 代码如下: from app_factory import ap ...
- mybatis获取表名——mybatis动态调用表名和字段名#{},${}
一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这 ...
- Mysql之存储过程,动态创建表和数据库-,动态删除-yellowcong
今天在弄mycat 的时候,有一个需求,就是创建12个数据库,然后数据库里面都创建一个表,我当时想象,这个玩意也不难,于是寻思通过存储过程来动态创建表,只需要传递进来数据的前缀名称和表名称,即可创建1 ...
- mysql 动态 建表,mysql数据库动态创建表的实例分享
摘要 腾兴网为您分享:mysql数据库动态创建表的实例分享,易视云3,完美root,刷机大师,手游宝等软件知识,以及清仓兔,找明星,爱普生1500w,txt完结小说全本软件,windows自带画图软件 ...
- 【MyBatis】myBatis动态传入表名进行查询
由于分表就涉及到了有相近查询语句只是表名不同的情况,刚开始使用了 <select id="selectById" resultMap="BaseResultMap& ...
- android sqlite动态创建表,QT下如何实现SQLite动态创建表
网上有很多人问sqlite动态创建多个表的问题,但几乎没有人给出满意的答案,事实上在QT环境下利用类QString很简单就能做到: 1.建立一个存储表名的QString 变量: QString nam ...
最新文章
- 在ubuntu 16.04.5 LTS上使用Python 2.7生成带logo的二维码实战
- 2017.3.29 报表统计 思考记录
- STM32 HAL库使用IIC
- Python——(Anaconda+PyCharm)Youki的Python环境配置笔记(Ubuntu+Windows)~
- 最大子段和之分治递归法
- VC++实现自定义切换按钮
- ubuntu如何完全卸载和安装 Java及android环境
- xpath获取标签的属性值_爬虫必备技能之网页解析库:xpath用法和实战
- CCF推荐期刊/会议历年发表论文数据库:CCF Rec-Paper DB
- 【柒】企业分析利器——强大企业模型
- word文档批量给图片添加题注
- 基本HTML标签语法整理
- 使用Python将Word表格嵌入Excel中!
- samba配置共享打印机
- Anaconda下安装Tensorflow和Keras的安装教程
- 笔记本电脑外放没声音,或外放有声音/插耳机没声音———Realtek High Definition Audio Driver安装
- Linux故障处理——磁盘空间满缺找不到对应大文件
- Win11系统默认英文字体怎么修改成为中文
- 第三章程序的机器级表示 学习报告
- wpf mysql 框架_带有 WPF 和实体框架6的简单数据应用 - Visual Studio | Microsoft Docs