ibatis支持批量处理的rowhandler_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > ibatis支持批量处理的rowhandler

ibatis支持批量处理的rowhandler

 2018/1/23 18:53:00  qingshizhi  程序员俱乐部  我要评论(0)
  • 摘要:项目中因为查询返回的数据量太大,用的是ibatis,所以选择用rowhandler,默认情况下rowhandler一次处理一条数据,有时候性能需要一次性处理一批数据,故写一下简单代码接口importcom.ibatis.sqlmap.client.event.RowHandler;publicinterfaceBatchRowHandler<T>extendsRowHandler{/***满足一定数量的对象后,执行一次批量数据操作*@paramlist*/voidhandBatch
  • 标签:Handler
项目中因为查询返回的数据量太大,用的是ibatis,所以选择用rowhandler,默认情况下rowhandler一次处理一条数据,有时候性能需要一次性处理一批数据,故写一下简单代码

接口
class="java" name="code">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();

发表评论
用户名: 匿名