ibatis支持批量处理的rowhandler
程序员文章站
2022-03-13 09:18:30
...
项目中因为查询返回的数据量太大,用的是ibatis,所以选择用rowhandler,默认情况下rowhandler一次处理一条数据,有时候性能需要一次性处理一批数据,故写一下简单代码
接口
抽象类
使用 实现handBatch()方法即可
调用
ProGetBatchRowHander hander=new ProGetBatchRowHander(1000);
最后要记得调用hander.handLast();
接口
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();
上一篇: 关于Paralle.For的求和问题
下一篇: Python基础——集合(set)
推荐阅读
-
sqlserver中通过osql/ocmd批处理批量执行sql文件的方法
-
批量更新数据库所有表中字段的内容,中木马后的急救处理
-
sqlserver中通过osql/ocmd批处理批量执行sql文件的方法
-
linux系统下批量转换UTF8到GB2312并处理UTF8的BOM标记
-
网站被黑后处理方法及删除批量恶意代码的方法步骤
-
Lightroom批量处理的方法详解
-
pr2018怎么批量处理曝光? Premiere2018批量调曝光的技巧
-
首款支持5G的iPad Pro预计9月发布:5nm A14处理器、后置多摄
-
华擎发布支持64核霄龙处理器的主板:内置512MB显存 采用VGA接口
-
使用pandas批量处理矢量化字符串的实例讲解