相信很多人都遇到过往Mybatis的Mapper.xml文件粘贴SQL的时候,因为多了一个’;’而导致SQL报错的情形吧。

难道就不能执行多条SQL了么?其实是可以的。在分表的情况下,这种需求是强烈的,比如在大批量插入数据的情形下,同时为了达到数据与表名之间的关系能够相互推算,必须实现不同数据插入不同的表,最简单的实现就是,通过数据计算Table ID,然后根据Table ID插入不同的表,程序内部做循环,但如果数据量达到百万或者千万级别,这种性能是让人无法忍受的。类似下面的SQL

insert into Table_Name_${tableId}

(

XXX1,

XXX2,

XXX3

)

VALUES

(

#{xxx1,jdbcType=BIGINT},

#{xxx2,jdbcType=BIGINT},

#{xxx3,jdbcType=BIGINT}

)

单条和List批量插入,性能相差到底多少?网上也有测试,有的说只有几倍,但我的个人项目而言,性能差距是几十倍。用传统MyBatis,单条插入1000条数据,需要30秒,但如果批量的话,插入速度大概是1秒2000-3000条,批量插入的性能比单条插入的性能提升了整整60-100倍。

废话那么多,怎么实现呢?首先,你需要配置你的jdbc url,加入如下参数(其它参数已经省略,我使用的连接池是druid)。

jdbc:mysql://127.0.0.1:3306/xxx?allowMultiQueries=true

然后,在Mapper.xml里面,就能够欢快的用如下SQL实现多表动态插入了

insert into TABLE_NAME_${item.tableId}

(

XXX1,

XXX2,

XXX3

)

VALUES

(

#{item.xxx1,jdbcType=BIGINT},

#{item.xxx2,jdbcType=BIGINT},

#{item.xxx3,jdbcType=BIGINT},

)

当然了,肯定不止是插入,其它操作依然适用。

mybatis批量夺标添加_MyBatis+MySQL同时执行多条SQL,实现多表插入数据相关推荐

  1. mysql 造1亿条记录的单表--大数据表

    读写文件 背景及木:现有数据1000w单表,为压力测试准备1亿条数据. 步骤: 1.将1000w条记录,除id外都导入到多个文件中: //DELIMITER DROP PROCEDURE if EXI ...

  2. mysql 并行执行sql_同时执行多条sql

    mysql怎么一次执行多条SQL语句 mysql一次执行多条SQL语句的操作方法和步骤如下: 首先,在桌面上,单击" Navicat For Mysql"图标,如下图所示. 其次, ...

  3. PHP-CRUD-API:将 REST API 添加到 MySQL/MariaDB、PostgreSQL、SQL Server 或 SQLite 数据库的单个文件 PHP 脚本

    https://github.com/mevdschee/php-crud-api 将 REST API 添加到 MySQL/MariaDB.PostgreSQL.SQL Server 或 SQLit ...

  4. SQL性能优化第二篇之Mybatis如何能够执行多条SQL

    在第一篇基础上,数据库能够成功执行语句,但是放到Java代码中会报错有木有. 原来,mybatis在我们使用链接连接数据库时,需要我们手动在连接上加上代码: &allowMultiQuerie ...

  5. python执行mysql多个sql语句_mysql -- 一次执行多条sql语句

    最近要做一个软件升级,其中涉及到数据库表字段的变动(新增或删除或修改),所有的关于数据库的变动的sql语句都是存放在Sqlupdate.sql文件中,每次升级的时候都需要执行一次Sqlupdate.s ...

  6. mysql数据库会同时执行sql吗_mysql 一次执行多条sql语句

    最近要做一个软件升级,其中涉及到数据库表字段的变动(新增或删除或修改),所有的关于数据库的变动的sql语句都是存放在Sqlupdate.sql文件中,每次升级的时候都需要执行一次Sqlupdate.s ...

  7. c mysql并行多条sql_Linux上使用C语言执行多条SQL命令访问MYSQL数据库的有关问题...

    Linux下使用c语言执行多条SQL命令访问mysql数据库的问题 Linux(Ubuntu10.04)系统,MYSQL5.1数据库,C语言! 数据库中有两张表:表A.B! 使用C语言从表A中查询数据 ...

  8. jdbc 3种获得mysql插入数据的自增字段值的方法_【JDBC】向数据表插入数据时,自动获取生成的主键...

    数据表设计时,一般都会有一个主键(Key)(自己指定),有时也可以使用联合主键: 有许多数据库提供了隐藏列为表中的每行记录分配一个唯一键值(如:rowid): 当我们没有指定哪一列作为主键key时,数 ...

  9. Jmeter JDBC执行多条SQL

    今天在编写自动化回归脚本的时候,需要在jmeter的jdbc请求中执行多条sql,在百度里搜索了一些文章,按照网上提供的步骤,发现不起作用,后来发现是作者的截图误导了,为了让后面的同学少走弯路,这里我 ...

最新文章

  1. 刷新页面时间不重置 前端倒计时_brackets:前端开发工程师必备编辑器之一
  2. 边框border属性总结
  3. python线程监控_Python实现线程状态监测简单示例
  4. 为高考学子加油,Java快速开发平台,JEECG 3.7.6高考性能增强版本发布
  5. 003-redis-命令-key操作,字符串操作
  6. 第8天 NSD NETWOEK
  7. 【转】oracle内置函数 trunc 使用
  8. Java设计模式笔记------设计原则完结
  9. php5apache2.dll,Apache2.2.8 + PHP5.2.5不能加载php5apache2.dll
  10. Git教程 git pull 和 git clone的区别
  11. 基于Java的杨辉三角
  12. 【VMware vSAN 7.0】4.8 有关 vSAN 许可证的注意事项—我们有软硬件解决方案
  13. 由四位央行官员为你制作的“数字货币”说明书
  14. 科学计算机调成了fx,科学计算器怎么编程
  15. B站视频下载器,可以下载到电脑后保存,畅享视频下载
  16. 当我们在谈论瑞幸咖啡的时候,我们谈论什么?
  17. 亚马逊服务器升降配和增/减磁盘
  18. 关于SASE与安全市场的那些事
  19. 天干地支计算年月日时
  20. 视觉工程师面试50问

热门文章

  1. mysql约束sex_MySQL笔记--约束
  2. 科大星云诗社动态20210215
  3. 如何与室友相处?2017-12-08
  4. 吴恩达《Machine Learning》精炼笔记 5:神经网络
  5. java中属于常量_java中的常量和属性
  6. IDEA+scala+spark程序开发流程
  7. FFTW在VS中集成与测试详解
  8. sql语句查询过慢的原因分析
  9. c++中实现delphi的按类名生成类对象
  10. delphi中move函数的用法