mybatis怎样批量插入数据到oracle,就算id自动增长问题?急啊 mysql 就可以的啊

肥皂泡2 发布于 2012/05/11 15:43
阅读 10K+
收藏 1

mybatis怎样批量插入数据到oracle,就算id自动增长问题?急啊  mysql 就可以的啊

求解啊   啊     啊啊 啊 啊

我这样写的。

<insert id="addTMsgSmsinfoForBatch" parameterType="java.util.List"> 
   <selectKey resultType="long" keyProperty="id" order="BEFORE">
     SELECT T_MSG_SMSINFO_SEQ.NEXTVAL AS id FROM dual
    </selectKey>
       INSERT INTO T_MSG_SMSINFO ( <include refid="columns_auotmsgsending" /> ) VALUES
   <foreach  collection="list" item="item" index="index" 
       separator=",">
       ( #{item.id},#{item.ecid},#{item.userid},#{item.sendermsisdn},#{item.receiverinfo},
         #{item.totalrec},#{item.smsorigin},#{item.originid},#{item.smscontent},#{item.smstype},
         #{item.scheduletime},#{item.auditstatus},#{item.inserttime},#{item.updatetime}
        )
   </foreach> 
 </insert>

 

就是在:

<selectKey resultType="long" keyProperty="id" order="BEFORE">
     SELECT T_MSG_SMSINFO_SEQ.NEXTVAL AS id FROM dual
    </selectKey>

有问题

加载中
1
tss0823
tss0823

我也遇到这种问题,baidu,google 都没有解决问题,最后通过自己手动改sql尝试,解决问题。

Mapper.xml

<insert id="insertRoleFunBatch" >
<selectKey keyProperty="id" resultType="Long" order="BEFORE" >
      select seq_auth_role_function.nextval as id from dual
  </selectKey>
insert into auth_role_function
(
id,role_id,function_id
)
select seq_auth_role_function.nextval, A.* FROM (
<foreach collection="list" item="item" index="index" separator="union all">
 
select  #{item.roleId} as roleId,#{item.functionId} as funId from dual 
</foreach>
) A
</insert>


执行后的sql


select seq_auth_role_function.nextval, t1.*
  from (select 1 as id, 0 as name
          from dual
        union all

        select 0 as id, 0 as name from dual) t1;


IT钢琴师
IT钢琴师
这样确实可以
0
xiaohua520
xiaohua520

不需要AS id

0
xiaohua520
xiaohua520

这种foreach 写法不支持oracle

0
肥皂泡2
肥皂泡2

引用来自“xiaohua520”的答案

这种foreach 写法不支持oracle

像这种批量插入的功能   myBatis 就不支持 oracle吗? jdbc就有批量插入的接口啊!
0
z
zenntou
       long st = new Date().getTime();
       System.out.println("批量插入开始=============");
SqlSession s = this.getSqlSessionFactory().openSession(ExecutorType.BATCH,false);
for (int i = 0; i < batchList.size(); i++) {
s.insert("BusinessData.insertBatchMonthBusinessData",batchList.get(i));
//2500条提交一次
if(i%2500==0){
s.commit();
}
}
s.commit();

long et = new Date().getTime();
System.out.println("插入共花费:"+(et-st)+"ms");
0
z
zenntou
批量插入最好不要用 SEQ,相当影响性能
0
肥皂泡2
肥皂泡2

引用来自“zenntou”的答案

批量插入最好不要用 SEQ,相当影响性能
不用SEQ啊 那有什么好的解决办法啊?
0
1
1179552822
我也是这种问题啊!!期待牛人解答
0
tss0823
tss0823

首先你必须能将mybatis 生成的sql 在oracle 命令行中执行通过,这个是王道!

返回顶部
顶部