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

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应对批量update

    为了解决这个问题,ibatis(现已更名为MyBatis)提供了一种支持批量更新的机制,能够显著提高数据处理的速度。 #### 批量Update背景与问题 在实际应用中,经常会遇到需要批量更新数据库中的数据的情况,例如:商品...

    ibatis3批量插入

    通过Ibatis3xml文件配置+Mysql实现数据批量插入,原先在网上找很多,都是关于批量更新,批量插入的很少,而且其写法又完全不同,所以自己研究了一下。可供参考。另外插入时如出现内容报错,请参照my.cnf修改书库配置...

    ibatis批量处理

    ### iBatis批量处理知识点详解 #### 一、iBatis基本实现 iBatis(现已更名为MyBatis)是一款优秀的持久层框架,它支持定制化SQL、存储过程及高级映射。iBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果...

    mysql,jdbc详解,与ibatis对比。批量查询,分页处理。

    - **批量查询**: 用于处理大量数据的查询任务。例如,当需要从表中检索数千条记录时,可以使用`IN`子句或循环处理等方式实现。 - **分页处理**: 在处理大量数据时非常有用,尤其是对于Web应用中的数据展示。常用的...

    ibatis的批量插入DAO实例

    此外,Ibatis还支持使用`&lt;foreach&gt;`标签来简化批量插入的XML配置,这在处理复杂场景时会更加方便。 了解这些知识点后,你可以根据具体项目需求灵活运用,提升数据库操作的效率。同时,对于源码的研究也能帮助我们更...

    ibatis批量存储

    总结来说,Ibatis批量存储涉及到iterate和foreach标签的使用,以及批处理的策略,它们都是为了更高效地处理大量数据。同时,HashMap的使用则为传递复杂参数提供了便利。熟练掌握这些知识点,可以有效地优化数据库...

    对IBatis分页的改进,使ibatis支持hibernate式的物理分页

    公司的大部分项目都开始使用IBatis作为O/R Mapping了,但是在使用的过程中也发现了很多不方便和存在争议的地方,其中一个不方便的地方就是分页,目前的处理方式都是在sqlMap中写针对特定数据库的物理分页Sql语句,对于...

    Spring高版本对ibatis的支持

    最近想在最新的Spring5.0中集成ibatis(不是mybatis),发现已经不在支持SqlmapClientTemplate和SqlmapClientFactoryBean,于是搞了这个工具jar来进行支持如下配置 ...

    ibatis 批量 增删改查

    在Ibatis中,批量操作提供了更高效、更灵活的方式处理大量数据。理解并熟练应用这些技巧,能显著提升应用程序的性能和可维护性。在实际项目中,根据具体需求选择合适的批量操作策略,并合理优化,可以大大降低系统...

    ibatis list

    在本文中,我们将深入探讨iBatis框架中的“ibatis批量”功能,特别是如何利用iBatis进行批量数据处理,包括批量插入、更新和删除操作。我们将通过解析提供的文件片段来阐述这一知识点,重点放在如何使用`&lt;iterate&gt;`...

    ibatis 支持枚举类型

    Ibatis对枚举类型的原生支持可能不如实体类那样直观,但通过一些策略,我们可以实现枚举与数据库字段之间的映射。以下将详细解释如何在Ibatis中处理枚举类型。 首先,我们需要定义枚举类。枚举类通常包含若干枚举...

    ibatis批量删除的方法.docx

    在这个例子中,`ids`参数是一个逗号分隔的字符串,如`"15,16"`,iBatis会自动处理这个字符串,将其转化为`IN (15, 16)`的SQL片段,从而实现批量删除。 ### 第二种方法:利用`iterate`标签的批量删除 第二种方法是...

    Spring与iBATIS的集成

    Spring与iBATIS的集成 iBATIS似乎已远离众说纷纭的OR框架之列,通常人们对非常流行的Hibernate情有独钟。但正如Spring A Developer's Notebook作者Bruce Tate 和Justin Gehtland所说的那样,与其他的OR框架相比...

    ibatis sql语句对条件中特殊字符% # 处理

    ibatis支持动态SQL的功能,这使得在构建SQL语句时可以更加灵活。在提供的代码片段中,使用了`&lt;isNotEmpty&gt;`标签来动态判断条件是否为空,并且通过`&lt;CDATA&gt;`标签来编写SQL片段。这种方式可以避免硬编码SQL语句,提高...

    Ibatis 事务处理

    然而,Ibatis不直接支持JTA,而是依赖于Spring框架或MyBatis-Spring集成来实现事务控制。 描述中提到的“NULL”可能表示这篇博文详细讨论了如何在Ibatis中集成Spring进行事务管理。Spring框架提供了一种声明式事务...

    扩展 iBatis 以透明支持多种数据库

    3. **方言支持**:实现 iBatis 的 `Dialect` 接口,为每种数据库提供特定的方言类,处理如分页、排序等数据库特有语法。 4. **事务管理**:根据不同的数据库特性配置合适的事务隔离级别和回滚规则,确保事务的一致...

    ibatis常用sql语句

    在处理批量更新或插入操作时,数组作为输入参数变得尤为重要。iBATIS通过`&lt;iterate&gt;`标签支持数组的遍历,将数组中的每个元素作为独立的值插入到SQL语句中。例如,`(" close=")" conjunction=","&gt;`这段代码会将`...

    ibatis源码,ibatis源码 ibatis源码 ibatis源码

    Executor执行器是iBatis的核心组件,它负责SQL的执行和结果的处理。Executor分为两种类型:SimpleExecutor和CachingExecutor,前者用于基本的SQL执行,后者增加了缓存功能。Executor通过`StatementHandler`来处理预...

Global site tag (gtag.js) - Google Analytics