ibatis支持批量处理的rowhandler

项目中因为查询返回的数据量太大,用的是ibatis,所以选择用rowhandler,默认情况下rowhandler一次处理一条数据,有时候性能需要一次性处理一批数据,故写一下简单代码

接口
import com.ibatis.sqlmap.client.event.RowHandler;

public interface BatchRowHandler<T> extends RowHandler {

/**
* 满足一定数量的对象后,执行一次批量数据操作
* @param list
*/
void handBatch();


/**
* 执行最后一批数据的操作,DAO调用RowHandler之后再执行才方法
*/
void handLast();

}


抽象类
import java.util.ArrayList;
import java.util.List;

/**批次hander处理,抽象类
* 注意此类为线程非安全
*
* @author tangwei001
*
* @param <T>
*/
public abstract class AbstractBatchRowHandler<T> implements BatchRowHandler<T> {

private List<T> list;

/**
* 批次大小设置,默认是20
*/
private int size=20;

/**
*
* @param size 设置批次处理大大小,当达到该大小时,触发批处理
*/
public AbstractBatchRowHandler(int size) {
if(size>0){
this.size=size;
list=new ArrayList<T>(size);
}else{
list=new ArrayList<T>(size);

}
}

@Override
public void handleRow(Object obj) {
list.add((T)obj);
if(list.size()>=size){
handBatch();
list=new ArrayList<T>(size);
}

}

@Override
public void handLast() {
handBatch();

}

/**
* 获取批次数据
* @return
*/
protected List<T> getBatchDate(){
return list;
}



使用 实现handBatch()方法即可


class ProGetBatchRowHander extends AbstractBatchRowHandler<Proget> {

public ProGetBatchRowHander(int size) {
super(size);
}

@Override
public void handBatch() {
List<Proget> list=getBatchDate();
//业务实现

}
}



调用
ProGetBatchRowHander hander=new ProGetBatchRowHander(1000);
最后要记得调用hander.handLast();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值