探寻 ibatis 1.3 批处理

在网络有一篇关于iBATIS batch原理的牛贴: http://www.javaeye.com/topic/68962  分析的也是iBATIS下的批处理。在iBATIS1.3的源代码中没没有见到这篇帖子标识的 代码,而且在1.3中,iBATIS处理batch的思路和这篇帖子也不相同。

 

iBATIS的批处理就是jdbc中的ps的batch操作。

在 iBATIS 1.x 中,批处理是为了对于同一个 sql ,使用 PreparedStatement 完成重复操作,使用了 ps 的批处理功能。 在一次 batch 中,iBATIS 会把用到的所有 ps 实例放到一个 ThreadLocal 对象中,根据 MappedStatement 来获取相应的 ps 做数据库更新操作,这样就避免了batch 过程中的多表操作生成 ps 时的效率问题。

iBATIS生成ps代码:

 

getStatementFromBatch

 

 

 

 

 

流程如下:

 

 

 

 

注:

count:当前处理的数据量

size:    批处理的数量

开启事务事务之后,然后进行批次处理。在这种情况下,整个批处理都是在同一个connection下完成的。在运行commitTransaction后,所有的数据才会提交的数据库中。

 

 

如果未开启事务,那么每次开启一个batch,在运行executeUpdate语句的时候都要获取一个新的connection,导致效率下降。此时,每次sqlMap.endBatch(),都会将当前 size的数据插入到数据库中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值