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

  • 相关阅读:
    Axure RP 8.0 中继器初体验
    随便写的随机数生成器,目前并没有实现设置精度和去重功能
    PHP向MySql中插入数据
    php连接mysql数据库练手
    C随便练练手的题
    个人档案 7-5
    个人档案
    个人档案 7-4
    个人档案 6-30
    个人档案 6-29
  • 原文地址:https://www.cnblogs.com/ChenLLang/p/5320587.html
Copyright © 2011-2022 走看看