`
hekuilove
  • 浏览: 158186 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

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>,否则就要报错。。
不要问哥为什么会报错,哥也不知道,哈哈哈哈哈啊哈哈哈。。。(太懒,不想去查资料了,有兴趣的可以去查下)
1
0
分享到:
评论
1 楼 weijs 2014-05-20  
你提到的两个第一种在sql server下都有问题,MYSQL的是写法SQL SERVER不支持,ORACLE那个写法,如果一次拼接的串太长会报错
附我自己在工作的写法及测试结果:
<insert id="xxxx" parameterType="java.util.List" > 
<!-- 注意 insert into uc_user_relationship_t values 不要写在循环里,其次 #{ur.username} 的方式,其中ur 是item的值 -->
        <!-- 上边的注释在使用mysql时有效 -->
        <!-- 插入前检查没有有效的关系记录才允许添加好友  -->
        <foreach collection="list" index="index" item="ur" separator=";">
        if not exists (select 1 from tableName where xxxxx)
        insert into xxxx (xxxx) values
            (#{ur.userName}, #{ur.friendName}...)
    </foreach> 
    </insert>
   
同一台服务器(公司开发机I3+4G内存),先测试SIMPLE,然后重启应用测试BATCH,在插入前后分别记录时间来计算时间差,LOG4J中将级别调为ERROR

时间单位:毫秒

8000条  <setting name="defaultExecutorType" value="SIMPLE" />

6563
4281
3984
3828
3890
3828
3813
3750
3890
4157

8000条  <setting name="defaultExecutorType" value="BATCH" />
781
547
547
516
453
531
421
485
437
406

相关推荐

    MyBatis批量插入(insert)数据操作

    在MyBatis中,批量插入数据是一种提高性能的有效方式,特别是在处理大量数据时。本文将详细介绍如何在MyBatis中实现批量插入,并通过一个具体的示例来说明。批量插入操作通常涉及以下关键步骤: 1. **实体类定义**...

    Mybatis批量foreach merge into的用法

    Mybatis批量foreach merge into的用法是通过Mybatis的动态SQL语法foreach循环插入实现的,这种方法可以批量插入时间价格表数据。如果某个套餐的某天的价格存在,则更新,不存在则插入。下面是该方法的详细介绍: ...

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

    MyBatis foreach批量插入数据:Oracle与MySQL区别介绍 MyBatis foreach批量插入数据是一种高效的数据批量插入方式,通过foreach标签可以实现批量插入数据。但是,在不同的数据库管理系统中,foreach标签的使用有...

    mybatis中批量插入的两种方式(高效插入)

    本文将深入探讨MyBatis中实现批量插入的两种高效方式。 ### 1. MyBatis `foreach` 标签 `foreach` 是MyBatis中用于在SQL语句中迭代集合的标签,特别适合构建`IN`条件。`foreach` 元素的属性包括: - `item`: 集合...

    Oracle/MySQL生成mybatis文件工具

    2. `insert`标签:用于插入新记录,支持批量插入。 3. `update`标签:用于更新现有记录,同样可以利用动态SQL进行条件判断。 4. `delete`标签:用于删除记录,依据特定条件执行。 实体类Java文件则是数据库表的Java...

    mybatis批量添加实现1

    本文将详细介绍如何使用Mybatis进行批量插入,包括针对MySQL和Oracle两种不同数据库的实现方式。 一、Mybatis批量添加基础 Mybatis允许开发者直接传递一个集合到Mapper接口的方法中,然后在映射文件中通过`...

    mybatis使用annotation在mysql,oracle上进行批量处理

    本文将详细讲解如何使用MyBatis的注解方式在MySQL和Oracle数据库上实现批量处理,旨在提高数据操作的效率。 首先,我们要理解MyBatis的核心原理,它是一个基于Java的持久层框架,通过XML或注解来映射SQL语句,简化...

    mybatis+Oracle做批量导入时的坑

    这样做是因为Oracle不支持像MySQL那样的`VALUES`子句进行批量插入,所以我们需要模拟这个过程,通过`UNION ALL`将多个单行查询组合成一个大的`SELECT`。 在Service层,我们定义了`addBleaseList`方法,它接收一个`...

    Oracle+Mybatis的foreach insert批量插入报错的快速解决办法

    总之,当在Oracle数据库中使用MyBatis进行批量插入时,务必注意适应Oracle的特定语法,如使用`INSERT ALL`,避免使用MySQL等其他数据库系统适用的语法,如逗号分隔的`VALUES`列表。同时,确保正确处理主键生成逻辑,...

    Mybatis传list参数调用oracle存储过程的解决方法

    "Mybatis调用Oracle存储过程传List...使用Mybatis传List参数调用Oracle存储过程,可以实现批量插入数据,解决了Mybatis批量插入数据的限制问题。同时,这种方法也可以灵活地控制事务回滚,提高了系统的可靠性和性能。

    Mybatis 插入一条或批量插入 返回带有自增长主键记录的实例

    Mybatis 插入一条或批量插入 返回带有自增长主键记录的实例 Mybatis 是一个基于 Java 的持久层框架,它提供了对数据库的访问和操作的功能。今天,我们将分享一个关于 Mybatis 插入一条或批量插入 返回带有自增长...

    MyBatis Oracle 自增序列的实现方法

    在MyBatis的配置文件中,你可能已经为其他支持自增主键的数据库(如MySQL)设置了`useGeneratedKeys="true"`,但对Oracle来说,因为自增机制不同,需要在插入语句中显式调用序列。所以,对于Oracle,你需要按照上述...

    SpringBoot定时任务实现Oracle和mysql数据同步

    如果需要批量插入,可以考虑使用`batchUpdate()`方法。 6. **错误处理**:在整个过程中,一定要捕获并处理可能出现的异常,保证系统的稳定运行。 7. **事务管理**:为了确保数据的一致性,可以在一个事务中完成...

    mybatis-generator

    在实际开发中,分页查询通常需要结合数据库特定的分页语法,例如MySQL的LIMIT和OFFSET,Oracle的ROWNUM等,mybatis-generator-plus会根据不同的数据库方言生成对应的分页SQL。 在使用mybatis-generator-plus时,你...

    Struts2批量插入

    对于数据库操作,MySQL Workbench、Oracle SQL Developer等可视化工具可以帮助编写和执行SQL语句,验证批量插入的效果。 总的来说,Struts2批量插入涉及到前端表单提交、Action处理、数据库操作等多个环节,理解并...

    mybatis plus 3.2.1破解版

    4. **批量插入与更新**:支持单个对象和List对象的批量插入和更新操作,提高数据库操作效率。 5. **分页插件**:内置了物理分页插件,兼容多种数据库,如MySQL、Oracle等,无需手动编写分页代码。 6. **数据权限...

    Mybatis增强工具包(Mybatis plus) v3.5.3.2.zip

    内置了分页插件,可以方便地实现分页查询,支持多种数据库的分页方式,如 MySQL、Oracle 等,使用 `Page` 对象进行分页参数设置和结果接收。 6. **主键生成策略**: 提供了多种主键生成策略,包括 Identity(自动...

    尚硅谷Mybatis视频教程41-50

    - **Oracle下的批量插入**:Oracle数据库有自己的批量插入语法,可能与MySQL有所不同,此视频会对比分析两种数据库的批量操作差异。 4. **50.尚硅谷_MyBatis_动态sql_sql_抽取可重用的sql片段.avi** - **SQL片段...

    mybatis-plus学习项目笔记

    MyBatis-Plus是一个强大的MyBatis扩展框架,它简化了常见的CRUD操作,提供了诸如自动填充、条件构造器、批量插入等实用功能。在这个"mybatis-plus学习项目笔记"中,我们可以深入探讨MyBatis-Plus的核心特性,以及...

Global site tag (gtag.js) - Google Analytics