Ibatis 批处理笔记

因为近期牵涉到有可能大批量更新数据的操作,于是找来Ibatis看了一下其中的批量存储,发现批处理。

代码片段:
  1. ....
  2. try{
  3.     this.startBatch();
  4.             
  5.     for (String str : list<String>) {
  6.          this.update(UP_USER_STATE, str);
  7.     }
  8.             
  9.     this.executeBatch();
  10.             
  11. }catch(Exception es){
  12.     backbool = false;
  13.     throw es;
  14. }
  15. .....

startBatch();  //开始一个批处理代码段
this.pdate(UP_USER_STATE, str);  //增加更新批处理
executeBatch();  //将之前开始的批处理代码段提交执行

以上代码如转为JDBC操作,可等同于如下代码
  1. ........
  2. con.setAutoCommit(false);
  3. Statement stmt = con.createStatement();
  4. for (String str : list<String>) {
  5.    stmt.addBatch("update xxx set state=1 where name = '" + str + "'");
  6. }
  7. int[] up_count = stmt.executeBatch();
  8. .....
如果在执行海量数据操作时,应该将更新语句放在一个事务然后分为多次Batch提交,这样对缓存的压力以及更新效率会更高。
 
executeBatch();   可以用 endBatch(); 替换,前者是将批处理交给ibatis操作,后者是直接用JDBC驱动进行处理。
另外,Ibatis的批处理对JBDC批处理作了自己的优化,最好在一个Batch块保证只对一个表操作。因为如果对多个表,每次传给Ibatis源代码中关于批处理的 addBatch 方法的 sql实例 都是新的,都会生成一个新的PreparedStatement实例(具体参见 http://www.pcdog.com/edu/java/2006/12/b177829.html ),因此在大批量操作时,会严重影响更新效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值