zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Python学习第61天(html之form标签)
    Python学习第60天(html之body标签)
    Python学习第59天(web前端html /1))
    Python学习第58天(selector版本的ftp习题实现)
    Python学习第57天(异步IO)
    Python学习第56天(configpraser模块复习)
    Python学习第55天(IO多路复用)
    Python学习第54天(阻塞(blocking) IO和非阻塞(non-blocking)IO)
    如何通过Git Bash的命令行将电脑本地项目上传到自己的GitHub上
    第10周周博客
  • 原文地址:https://www.cnblogs.com/ChenLLang/p/5320587.html
Copyright © 2011-2022 走看看