【转】mybatis Mybatis批量插入Oracle、MySQL

要做批量插入数据库,首先得知道该数据库对批量插入所支持的语法。每个数据库批量插入的语法都不一样,我介绍两种。
MySQL:1、INSERT INTO TABLE_NAME(ID,NAME)VALUES(1,‘张三‘),(2,‘李四‘)
              2、INSERT INTO TABLE_NAME(ID,NAME)VALUES(1,‘张三‘);INSERT INTO TABLE_NAME(ID,NAME)VALUES(2,‘李四‘)
Oracle:1、INSERT INTO TABLE_NAME (ID,NAME) (SELECT 1,‘张三‘ from dual) union all (SELECT 2,‘李四‘ from dual)
             2、INSERT INTO TABLE_NAME (ID,NAME) VALUES(1,‘张三‘);INSERT INTO TABLE_NAME(ID,NAME)VALUES(2,‘李四‘)
4条SQL都是数据库支持的写法。两者的第二种是不推荐的写法,因为不管效率还是可读性上都远差于第一种
当然,还有更重要的一点,Mybatis不支持第二种写法,因为mybatis的一个事务只支持一条SQL
所以,Mybatis里写法只能取两者的第一种,代码如下
MySQL

<select id="batchSave" parameterType="java.util.List">
                INSERT INTO TABLE_NAME(ID,NAME) VALUES
                <foreach collection="list"  item="itm" separator=",">
                        (#{itm.id},#{itm.name})
                </foreach>
        </select>

ORACLE:

<select id="batchSave" parameterType="java.util.List">
                INSERT INTO TABLE_NAME(ID,NAME)
                <foreach collection="list"  item="itm" separator="union all">
                        (SELECT #{itm.id},#{itm.name} FROM DUAL)
                </foreach>
        </select>

这里要注意了,标签一定得是<SELECT>,不能是<INSERT>或者<UPDATE>,否则就要报错。。
不要问哥为什么会报错,哥也不知道,哈哈哈哈哈啊哈哈哈。。。(太懒,不想去查资料了,有兴趣的可以去查下)

时间: 2024-10-10 22:39:27

【转】mybatis Mybatis批量插入Oracle、MySQL的相关文章

mybatis foreach批量插入数据:Oracle与MySQL区别

mybatis foreach批量插入数据:Oracle与MySQL不同点: 主要不同点在于foreach标签内separator属性的设置问题: separator设置为","分割时,最终拼接的代码形式为:insert into table_name (a,b,c) values (v1,v2,v3) ,(v4,v5,v6) ,... separator设置为"union all"分割时,最终拼接的代码形式为:insert into table_name (a,b

Java通过Mybatis实现批量插入数据到Oracle中

最近项目中遇到一个问题:导入数据到后台并将数据插入到数据库中,导入的数据量有上万条数据,考虑采用批量插入数据的方式: 结合网上资料,写了个小demo,文章末尾附上demo下载地址 1.新建项目:项目目录结构如下图所示,添加相应的jar包 2.新建数据库表:ACCOUNT_INFO 1 CREATE TABLE ACCOUNT_INFO ( 2 "ID" NUMBER(12) NOT NULL , 3 "USERNAME" VARCHAR2(64 BYTE) NULL

MyBatis动态批量插入、更新Mysql数据库的通用实现方案

一.业务背景 由于需要从A数据库提取大量数据同步到B系统,采用了tomikos+jta进行分布式事务管理,先将系统数据源切换到数据提供方,将需要同步的数据查询出来,然后再将系统数据源切换到数据接收方,进行批量的插入和更新操作, 关于数据源的切换可以参考之前的文章<spring+springMVC+Mybatis架构下采用AbstractRoutingDataSource.atomikos.JTA实现多数据源灵活切换以及分布式事务管理> 二.批量插入的具体实现 1.查询需要同步的数据: @Aut

MyBatis批量插入数据(MySql)

由于项目需要生成多条数据,并保存到数据库当中,在程序中封装了一个List集合对象,然后需要把该集合中的实体插入到数据库中,项目使用了Spring+MyBatis,所以打算使用MyBatis批量插入,应该要比循环插入的效果更好,由于之前没用过批量插入,在网上找了一些资料后最终实现了,把详细过程贴出来.供以后查阅和学习. java代码: 注意:这里循环的时候需new 出来新的对象,而不能通过循环改变属性的值就认为这是一个新的对象了,通俗的说就是new ReddemCode()要放在for循环的里面.

springmvc+mybatis+ajax 批量插入数据

批量插入.AJAX发起请求,核心代码如下: var mids = new Array(); for (var i=0; i< rows.length; i++) {     mids.push(rows[i].id); } $.ajax({     type: 'POST',     dataType: "json",     async: false,     traditional:true, //这一行很重要     url: parent.getBasePath()+&q

MyBatis中批量插入数据对插入记录数的限制

<基于Mybatis框架的批量数据插入的性能问题的探讨>(作者:魏静敏 刘欢杰 来源:<计算机光盘软件与应用> 2013 年第 19 期)中提到批量插入的记录数不能超过1000条,实测可以插入超过1000条. 原文地址:https://www.cnblogs.com/huangzejun/p/8143043.html

Springboot集成mybatis时批量插入

通过注解的形式实现数据库的批量插入 /** * @author Holley * @Description 请输入一句话进行描述 * @create 2018-07-16 12:09 **/ @Component @Mapper public interface TagOfPatientDao { @InsertProvider(type = TagOfPatientProvider.class,method = "insertAll") void insertAll(@Param(&

ibatis 批量插入oracle总结

1. 使用批量插入最先想到如下的插入语句 insert into a (id,name) values('','') ,('','') 但是 oracle 并不支持这种写法 然后查询得知可以使用如下写法 insert all into a(id,name) values('','') into a(id,name) values('','') (注:可以一次插入一个表也可以多个表) 但是这种方式有一种限制,就是 行数乘以列数不能大于1000(我没有验证),而且这种方式据说效率不高(我没有验证)

mybatis批量插入oracle大量数据记录性能问题解决

环境: mybatis  + oracle11g r2 1.使用"直接路径插入"(以下sql语句中的"/*+append_values */"),而且使用keyword"union all": <insert id="addUidCodeBatch" parameterType="java.util.List"> insert into /*+append_values */ T_UID_COD