基于回调方式的Spring+iBatis实现批量处理

基于回调方式的Spring+iBatis实现 
如果观察过Spring的源代码,你一定知道,Spring为了保持事务统一控制,在实现ORM框架时通常都采用了回调模式,从而避免了事务代码入侵的可能! 
修改后的代码如下: 

@SuppressWarnings("unchecked")  
public void create(final List<Reply> replyList) {  
    // 执行回调  
    sqlMapClientTemplate.execute(new SqlMapClientCallback() {  
        // 实现回调接口  
        public Object doInSqlMapClient(SqlMapExecutor executor)  
                throws SQLException {  
            // 开始批处理  
            executor.startBatch();  
            for (Reply reply : replyList) {  
                // 插入操作  
                executor.insert("Reply.create", reply);  
  
            }  
            // 执行批处理  
            executor.executeBatch();  
  
            return null;  
  
        }  
    });  
  
} 

 


注意,待遍历的参数replyList需要加入final标识!即,待遍历对象不能修改! 

引用
public void create(final List<Reply> replyList)

 

public  void updateMai(final List<MailContext> list) {
	        try
	        {
	            final HashMap<String, Object> map = new HashMap<String, Object>();
	            this.getSqlMapClientTemplate().execute(new SqlMapClientCallback()
	            {
	                
	              public Object doInSqlMapClient( SqlMapExecutor executor) throws SQLException
	                {
	                    executor.startBatch();
	                    for(int i=0;i<list.size();i++)
	                    {
	                     map.put("id",list.get(i).getId());
	                     map.put("title",list.get(i).getTitle());
	                     executor.update("MailContext.UPDATE_MAILCONTEXTLIST", map);
	                    }
	                    executor.executeBatch();
	                    return null;
	                }
	            });
	        }
	        catch (Exception ex){
	        	ex.printStackTrace();
	        }
	}

  

需在service增加回滚操作
@Transactional(rollbackFor = Exception.class)  

 


这样做,就将事务处理的控制权完全交给了Spring! 
简述: 

    1. SqlMapClientCallback 回调接口
    2. doInSqlMapClient(SqlMapExecutor executor) 回调实现方法
    3. DataAccessException 最终可能抛出的异常

转载于:https://www.cnblogs.com/take-notes/p/7281061.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值