接口
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();