*设为首页
*加入收藏
热门关键字: JAVA
>>当前位置:Java大本营>环境配置>文章内容
Ibatis 批处理详解
作者: 发布时间:2008-09-04 20:18:37
因为近期牵涉到有可能大批量更新数据的操作,于是找来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. .....
可以看出,Ibatis每一次批处理,表示得到一个新的stmt,然后通过这个stmt进行批量操作。
因此如果在执行海量数据操作时,应该将更新语句放在一个事务然后分为多次Batch提交,这样对缓存的压力以及更新效率会更高。

另外,Ibatis的批处理对JBDC批处理作了自己的优化,最好在一个Batch块保证只对一个表操作。因为如果对多个表,每次传给Ibatis源代码中关于批处理的 addBatch 方法的 sql实例 都是新的,都会生成一个新的PreparedStatement实例(具体参见http://www.pcdog.com/edu/java/2006/12/b177829.html ),因此在大批量操作时,会严重影响更新效率。

· JAVA类继承过程中其成员的一些问题(09-04)
· TOAD的使用(09-04)
· 第八章java.io包(09-03)
· 第十章Swing(1)(09-03)
· 应用设计模式编写易于单元测试的代码,(09-03)
· JAVA反射机制(09-03)
· Hibernate检索策略(09-03)
· hibernate3学习笔记(十八)|关系映射(09-03)
· Injecting the security token into t(09-03)
· 扩展DataView实现(MultiSelect)多行(09-02)
· java取系统时间(09-02)
· Ext实现页面表单Enter全键盘导航(09-02)
复制地址发给您的好友: [推荐文章] [返回顶部] [关闭窗口]
版权所有 Java大本营 1999-2007 转载请注明出处