您的位置:首页 > 数据库 > Oracle

spring mybatis组合下对oracle的批量插入

2014-11-14 00:00 357 查看
摘要: spring mybatis组合框架下,对oracle的批量插入的xml方法

mybatis没有实现oracle的批量插入,网上提供的的jdbctemplate方式不能很好控制事务,而xml方式也总不如人意,因在项目中用到该类型情况,整好了,发出来大家共享共享。
<insert id="insertBatch" parameterType="java.util.List">

<selectKey resultType="java.lang.Long" keyProperty="seqId" order="BEFORE">
SELECT 0 FROM DUAL
</selectKey>

insert into T_CSM_MERCH_IMP_DATA_ATTR (SEQ_ID, IMP_SEQ_ID, BATCH_ID,
CHECK_KEY, ATTR_ID, ATTR_TYPE,
ATTR_VAL, STATE)
SELECT SQ_CSM_MECH_IMP_DATA_ATTR_ID.NEXTVAL , A.* FROM
(
<foreach collection="list" item="item" index="index" separator="union all" >
select
#{item.impSeqId,jdbcType=DECIMAL}, #{item.batchId,jdbcType=VARCHAR},
#{item.checkKey,jdbcType=VARCHAR}, #{item.attrId,jdbcType=VARCHAR}, #{item.attrType,jdbcType=VARCHAR},
#{item.attrVal,jdbcType=VARCHAR}, #{item.state,jdbcType=CHAR}
from dual
</foreach>
) A

</insert>

网上很多方法都不注意

<selectKey resultType="java.lang.Long" keyProperty="seqId" order="BEFORE">
SELECT 0 FROM DUAL
</selectKey>

这个地方,使用了

<selectKey resultType="java.lang.Long" keyProperty="seqId" order="BEFORE">
SQ_CSM_MECH_IMP_DATA_ATTR_ID.NEXTVAL
</selectKey>

这样会造成序列的多次执行,可是去掉selectKey标签又报错,所以只要改成

SELECT 0 FROM DUAL

就可以了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息