C_sdn_000000 2011-12-11 20:04
浏览 920
已采纳

Ibatis怎么做批量更新?????

<insert id="updateStatusBatch" parameterClass="hashMap">  
update  
Question  
set  
status = #status#  
<dynamic prepend="where questionId in">  
<isNotNull property="actionIds">  
<iterate property="actionIds" open="(" close=")" conjunction=",">  
#actionIds[]#  
</iterate>  
</isNotNull>  
</dynamic>  
</insert> 

上面的解析成sql就是
update Question  set status = "OK"  where questionId in(1,2,3,4,5...)


到网上找了很多ibatis批量更新的例子,基本上都是这样,我心想难道他们做的项目中只遇到这种把in中的id的status全部更新为同一个值吗,如果每个id对应的status不同呢,怎么做,难道把sql全部放到iterate中吗,这样和for循环没什么区别,郁闷中。。。

小弟不才,刚接触ibatis,想请问ibatis是怎样做批量增改的,

PS:只是单独的ibatis项目,不和spring集成

 

  • 写回答

4条回答 默认 最新

  • iteye_15914 2011-12-12 09:08
    关注

    有的时候,我们需要一次性插入很多的数据或者一次性更新、删除很多的数据,这是为了提高效率。假如不用批处理 ,相当于是一条一条的插入。而批处理是一次性的修改数据,这样减少了数据库连接的消耗。
    至于ibaits 执行
    [code="java"]
    sqlMapClient.startBatch();

    .....
    sqlMapClient.executeBatch();

    [/code]
    ,我认为ibatis是对statement的addBatch()方法做了封装。源码没看过 ,但认为原理是这样。
    在我做过的项目里,基本是一次性修改万级以上的数据时 会用批处理,我会把数据分多批,一批一批的处理 这样速度快。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿