mybatis使用oracle批量插入


mysql的批量大家應該都知道,oracle和mysql還是有些不同的,如下:

<insert id="inserts" parameterType="com.qianxingniwo.model.DlyOnlinePayOrder" useGeneratedKeys="false" >
    insert into YYSC_PLAT.DLY_ONLINE_PAY_ORDER (ORDER_ID, TRANSACTION_ID, ORDER_TYPE,
    WX_APPID, PAY_ORDER_ID, PAY_TIME,
    REFUND_MONEY, PAY_STATE, SOURCE,
    SUB_MCH_ID, PLATE_NUM, CARD_NO,
    PAY_TYPE, PAY_MONEY, IDEN,
    WX_MCH_ID, REAL_PAY_MONEY, ID,
    ORDER_DATE, REFUND_DATE, ATTACH,
    CREATE_TIME, UPDATE_TIME)
    <foreach collection="list" item="item" index="index" open="(" close=")" separator="union all">
    select
     #{item.orderId,jdbcType=NUMERIC}, #{item.transactionId,jdbcType=VARCHAR}, #{item.orderType,jdbcType=NUMERIC},
      #{item.wxAppid,jdbcType=VARCHAR}, #{item.payOrderId,jdbcType=VARCHAR}, #{item.payTime,jdbcType=DATE},
      #{item.refundMoney,jdbcType=DECIMAL}, #{item.payState,jdbcType=NUMERIC}, #{item.source,jdbcType=NUMERIC},
      #{item.subMchId,jdbcType=VARCHAR}, #{item.plateNum,jdbcType=VARCHAR}, #{item.cardNo,jdbcType=VARCHAR},
      #{item.payType,jdbcType=NUMERIC}, #{item.payMoney,jdbcType=DECIMAL}, #{item.iden,jdbcType=VARCHAR},
      #{item.wxMchId,jdbcType=VARCHAR}, #{item.realPayMoney,jdbcType=DECIMAL}, #{item.id,jdbcType=VARCHAR},
      #{item.orderDate,jdbcType=DATE}, #{item.refundDate,jdbcType=DATE}, #{item.attach,jdbcType=VARCHAR},
      #{item.createTime,jdbcType=DATE}, #{item.updateTime,jdbcType=DATE}
      from dual
    </foreach>

  </insert>

運行通過。在Oracle的版本中,有幾點需要注意的:

        1.SQL中沒有VALUES;

        2.<foreach>標簽中的(select ..... from dual);

        3.<foreach>標簽中的separator的屬性為"UNION ALL",將查詢合並結果集。

        4.最重要的一點就是一定要在insert標簽中加入useGeneratedKeys="false",如果不加則會報如下錯誤:

        ### Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正確結束

 

說明:insert的主鍵,我先調用了序列,然后復制給對象的屬性了,所以在insert的時候直接用#{} 取字段就可以了

原文鏈接:https://blog.csdn.net/qq_37630354/article/details/82792288


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM