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

  • 相关阅读:
    Servlet生命周期
    DAO 开发模式的几个类
    Iterator用法
    mysql相似于oracle的to_char() to_date()方法
    Java Web页面跳转
    JSP 连接MySQL 5.1
    采用DOM进行表格的修改操作
    使用css让XML文件按照HTML的风格显示出来
    正则表达式Regular Expression
    什么是“堆”,"栈","堆栈","队列",它们的区别
  • 原文地址:https://www.cnblogs.com/dqcer/p/9530905.html
Copyright © 2011-2022 走看看