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