读书人

iBatis整理Spring环境上批处理实现

发布时间: 2012-08-27 21:21:57 作者: rapoo

iBatis整理——Spring环境下批处理实现
最近做一个小项目,用到Spring+iBatis。突然遇到一个很久远,却很实在的问题:在Spring下怎么使用iBatis的批处理实现?

大概是太久没有写Dao了,这部分真的忘得太干净了。

从4个层面分析这部分实现:

    iBatis的基本实现基于事务的iBatis的基本实现基于事务的Spring+iBatis实现基于回调方式的Spring+iBatis实现


1.iBatis的基本实现
iBatis通过SqlMapClient提供了一组方法用于批处理实现:
    startBatch() 开始批处理executeBatch() 执行批处理

代码如下:
 这么做,有点恶心!
除此之外,异常的处理也很恶心,不能够简单的包装为 DataAccessException 就无法被Spring当作统一的数据库操作异常做处理。


4.基于回调方式的Spring+iBatis实现
如果观察过Spring的源代码,你一定知道,Spring为了保持事务统一控制,在实现ORM框架时通常都采用了回调模式,从而避免了事务代码入侵的可能!
修改后的代码如下:
 
简述:
    SqlMapClientCallback 回调接口doInSqlMapClient(SqlMapExecutor executor) 回调实现方—ataAccessException 最终可能抛出的异常

通过上述修改,最终能够解决第三种实现方式中的种种不足!

Spring对iBatis提供的支持还是不够完善,即便是现在最新的Spring3.0.4。最开始,本打算用Spring3.0+iBatis3.0,结果Spring报错,说找不到“com.ibatis.xxxxx”完全是iBatis2.x的包路径!汗颜~ 还是Hibernate比较得宠!

做个小记录,呵呵!
,不过采用你这种方法试了,效率还不错的,实现了批处理。
另外,如果直接sqlMapClientTemplate执行insert()方法,将会造成异常!
我是直接用this.getSqlMapClientTemplate().execute(new SqlMapClientCallback() {没有抛出异常。
主要不是异常问题的考虑,主要是考虑事务统一处理! 学习了。 10 楼 sunjichao 2011-12-20 Copperfield 写道哥们,咨询个问题:
第四种我试了一下, 在执行executor.executeBatch();时,一旦遇到异常,数据没有批量回滚,10条数据有2条异常,则正常插入8条数据,这个很是不解。。。
遇到同样的问题,求解释。 11 楼 snowolf 2012-06-25 sunjichao 写道Copperfield 写道哥们,咨询个问题:
第四种我试了一下, 在执行executor.executeBatch();时,一旦遇到异常,数据没有批量回滚,10条数据有2条异常,则正常插入8条数据,这个很是不解。。。
遇到同样的问题,求解释。
有没有配置事务层?这段代码很久了,我都是在service用配置事务。如果没有事务控制,不会回滚!

读书人网 >软件架构设计

热点推荐