mybatis批量插入並返回主鍵(序列)-oracle


需求:批量插入數據,並返回每條數據的主鍵(序列),因為這里是采用序列生成唯一的主鍵的,

其實oracle批量 插入操作有幾種,網上百度都是有相關資源的。但是筆者現在的需求是,不僅批量插入數據后,並返回每條數據的主鍵,

網上查閱了一番始終沒有找到,相應辦法,倒是針對mysql貌似mybatsi是支持批量返回主鍵的,因為筆者沒有測試,所有不敢妄下言論。

好了,說了這么多,直接進入正題:

1、參照網上的相關資源,如圖所示

<insert id="saveEPDetail" useGeneratedKeys="true"  parameterType="java.util.List">
        <selectKey keyProperty="code" resultType="String" order="BEFORE">
            select SEQ_DIS_DRUG_PRESC_DETAIL.NEXTVAL as code from dual
        </selectKey>
        INSERT INTO DIS_DRUG_PRESC_DETAIL(
          code,
          antibac_purpose,
          ref_price,
         )
        SELECT  SEQ_DIS_DRUG_PRESC_DETAIL.NEXTVAL,t.*
        FROM (
        <foreach collection="list" item="item" separator="UNION ALL">
          select
            #{item.antibacPurpose,jdbcType=VARCHAR},
            #{item.skintObserver2,jdbcType=VARCHAR}
            from dual
        </foreach>
        ) t
    </insert>

結果批量插入式成功了,單主鍵code打死都沒有返回,如是一條條插入又要加鎖

最后的解決方式:因為筆者這里是采用序列生成的主鍵,於是在插入數據的時候,先調用一下序列獲取到序列值,再賦值給主鍵code,最后進行批量插入操作。

如圖所示java dao:

    /**
     * 獲取明細表主鍵
     *
     * @return
     */
    String getEpDetailCode();

xml:

    <!--主鍵-->
    <select id="getEpDetailCode" resultType="java.lang.String">
        select SEQ_DIS_DRUG_PRESC_DETAIL.NEXTVAL as code from dual
    </select>

最后問題終於解決的,若大家有好的方案歡迎指點E-mail dqcer@sina.com


免責聲明!

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



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