• 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>,否则就要报错。。

    =========================================================

    第二种思路:

    针对oracle的批量添加:
     
      1. <insert id="addHomeworkListInfo" parameterType="list">  
      2.         INSERT INTO homework_list  
      3.         (homework_list_id,  
      4.         homework_id,  
      5.         count,  
      6.         type,  
      7.         content) SELECT SEQ_HOMEWORK_LIST_ID.NEXTVAL, A.* FROM(  
      8.         <foreach collection="homeworkListInfo" item="item" index="index"  
      9.             separator="union all">  
      10.             SELECT  
      11.             #{item.homeworkId},  
      12.             #{item.count},  
      13.             #{item.type},  
      14.             #{item.content}  
      15.             FROM dual  
      16.         </foreach>  
      17.         ) A  
      18.     </insert> 

    出处:http://yjmyzz.cnblogs.com

  • 相关阅读:
    虚拟机安装 ubuntu 后,更新源无效,以及无法联网安装软件的问题
    使用IE滤镜实现css3中rgba让背景色透明的效果
    C# 代理应用
    通过 DynamicLinq 简单实现 N-Tier 部署下的服务端数据库通用分页
    ICMP:internet 控制报文协议
    多模板支持
    C#与Java对比学习:数据类型、集合类、栈与队列、迭达、可变参数、枚举
    IOS中KVO模式的解析与应用
    ASP.NET MVC实现仪表程序
    spring和redis的整合
  • 原文地址:https://www.cnblogs.com/ChenLLang/p/5320587.html
Copyright © 2020-2023  润新知