`
qingshizhi
  • 浏览: 4761 次
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    ibatis学习资料

    - **RowHandler接口**:通过实现`RowHandler`接口来自定义结果集处理逻辑。 #### 事务 - **什么是事务**:事务是一系列操作的集合,要么全部成功,要么全部失败。 - **事务的四大属性ACID** - **原子性(Atomicity...

    iBATIS学习笔记

    - **批处理**:iBATIS支持批量执行SQL语句,提高了数据处理效率。 - **iBATIS优缺点总结** - **优点**: - 易于上手。 - 可控性好。 - 性能较高。 - **缺点**: - SQL语句分散不易维护。 - 需要编写较多的XML...

    IBATIS实用记录

    目 录 1. JAVA基础 3 1.1 二级 3 ...3.3.7 结合RowHandler进行查询(select) 7 3.3.8 分页查询 (select) 7 3.3.9 基于Map的批量查询 (select) 7 4. JAVA基础 8 4.1 二级 8 4.1.1 三级 8 4.1.1.1 四级 8

    iBATIS教程 pdf

    - **用RowHandler执行查询(select)**:通过RowHandler接口处理查询结果。 - **查询成PaginatedList(select)**:实现了分页查询的功能。 - **查询成Map(select)**:将查询结果映射到Map对象中。 #### 十一、...

    PhD_Thesis_Cristina_Pinneri.pdf

    PhD_Thesis_Cristina_Pinneri

    Git知识学习(尚硅谷)

    Git知识学习(尚硅谷)

    套筒机械加工工艺规程制订设计.rar

    套筒机械加工工艺规程制订设计.rar

    The First Adventures on Differential Geometry 9789811296178.pdf

    The First Adventures on Differential Geometry 9789811296178

    汽车防误踏油门机构的设计.zip

    汽车防误踏油门机构的设计.zip

    汽车离合器设计.zip

    汽车离合器设计.zip

    基于SpringBoot的文学创作社交论坛(源码+数据库+万字文档+ppt)533

    基于SpringBoot的文学创作社交论坛,系统包含两种角色:管理员、用户主要功能如下。 【用户功能】 1. **首页:** 浏览社交论坛的主要信息。 2. **火车信息:** 阅读和浏览用户发布的文学创作。 3. **公告资讯:** 查看社交论坛发布的重要通知和公告。 4. **后台管理:** - **首页:** 进行后台管理相关操作。 - **个人中心:** 管理个人信息,查看火车票订购历史等。 - **车票预订管理:** 预订文学创作,选择特定的创作者或主题。 - **车票退票管理:** 处理用户对已预订文学创作的退票请求。 5. **个人中心:** 管理个人信息。 【管理员功能】 1. **首页:** 查看社交论坛整体概况。 2. **个人中心:** 修改密码、管理个人信息。 3. **用户管理:** 审核和管理注册用户的信息。 4. **火车类型管理:** 管理文学创作的分类信息。 5. **火车信息管理:** 监管和管理社交论坛上的文学创作信息。 6. **车票预订管理:** 查看和管理用户的文学创作预订情况。 7. **车票退票管理:** 处理用户对已预订文学创作的退票请求。 8. **系统管理:** - **公告资讯:** 发布、编辑和删除系统的通知和公告。 - **关于我们:** 编辑和更新社交论坛的介绍。 - **系统简介:** 提供社交论坛的简要介绍。 - **轮播图管理:** 管理社交论坛首页的轮播图。 二、项目技术 编程语言:Java 数据库:MySQL 项目管理工具:Maven 前端技术:Vue 后端技术:SpringBoot 三、运行环境 操作系统:Windows、macOS都可以 JDK版本:JDK1.8以上都可以 开发工具:IDEA、Ecplise、Myecplise都可以 数据库

    数控铣床主轴箱设计.zip

    数控铣床主轴箱设计.zip

    某电镀废水工艺流程及平面布置图.zip

    某电镀废水工艺流程及平面布置图.zip

    joblib-0.9.0b4-py2.7.egg

    该资源为joblib-0.9.0b4-py2.7.egg,欢迎下载使用哦!

    价值60元的带会员和后台版的域名防红1.19最新免授权开心版

    管理会员制度渠道,掌管多种服务,黑白名单管理邮箱配置生成提醒发送对接易支付进行交易,订单列表,带有各种短网址功能提供接口对接,实现短网址+防红两不误,可自定义多中转域名,自动识别安全网址各种防红数据后台可显,自定义跳转网站 用户端android-ios 会员制度享受,自定义跳转网站,在线充值,我的生成,在线生成,为你的网址提供保护短网址列表接口文档数据显示,编辑我的生成 防红效果全网 在短网址与防红的前提下,为你的网站提供SEO服务以及腾讯相关网站检测的优化 贴吧+短视频平台+ios+android+pc皆正常 安装:上传源码,访问安装。提示授权时,随意填写 6位数字即可

    joblib-0.9.0b3.tar.gz

    该资源为joblib-0.9.0b3.tar.gz,欢迎下载使用哦!

    实时操作系统毕业设计项目内含说明书.zip

    实时操作系统毕业设计项目内含说明书.zip

    python相关学习资源,python

    python

    塑料瓶自动封口机设计.rar

    塑料瓶自动封口机设计.rar

    CarPlay 系统功能介绍,比较专业的文档,告诉我们开发Carplay的时候需要遵循的规则

    内容概要:本文介绍了苹果公司在WWDC19上发布的CarPlay系统的最新进展,主要包括四个方面的改进:不规则形状显示屏支持、多屏显示支持、动态屏幕尺寸调整以及“嘿,Siri”语音助手集成。不规则形状显示屏支持允许开发者为CarPlay定义交互区域,确保内容适应各种非矩形屏幕。多屏显示支持使车辆可以在多个屏幕上同时展示CarPlay界面,如中心控制台和仪表盘,提供导航、音乐播放等不同内容,并支持独立的夜间模式。动态屏幕尺寸调整功能让CarPlay界面可以实时调整大小,以适应不同的驾驶环境或用户需求。最后,“嘿,Siri”功能让用户可以通过语音唤醒Siri,即使在播放音乐时也能无缝交互,系统内置了持续的回声消除和降噪处理,确保语音识别的准确性。; 适合人群:汽车制造商、软件开发者以及对车载信息系统感兴趣的科技爱好者。; 使用场景及目标:①汽车制造商可以根据新的CarPlay特性优化车内娱乐和导航系统的用户体验;②开发者可以利用这些新特性创建更加丰富的车载应用程序;③科技爱好者可以了解最新的车载技术发展趋势。; 其他说明:文档详细描述了CarPlay系统的技术细节,包括语音活动检测器、关键词检测器、回声消除和降噪等功能的工作原理,以及车辆系统的要求,如始终开启的麦克风输入流处理、连续回声消除和降噪等。更多相关信息可参考苹果开发者网站。

Global site tag (gtag.js) - Google Analytics