项目中因为查询返回的数据量太大,用的是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(现已更名为MyBatis)提供了一种支持批量更新的机制,能够显著提高数据处理的速度。 #### 批量Update背景与问题 在实际应用中,经常会遇到需要批量更新数据库中的数据的情况,例如:商品...
通过Ibatis3xml文件配置+Mysql实现数据批量插入,原先在网上找很多,都是关于批量更新,批量插入的很少,而且其写法又完全不同,所以自己研究了一下。可供参考。另外插入时如出现内容报错,请参照my.cnf修改书库配置...
### iBatis批量处理知识点详解 #### 一、iBatis基本实现 iBatis(现已更名为MyBatis)是一款优秀的持久层框架,它支持定制化SQL、存储过程及高级映射。iBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果...
- **批量查询**: 用于处理大量数据的查询任务。例如,当需要从表中检索数千条记录时,可以使用`IN`子句或循环处理等方式实现。 - **分页处理**: 在处理大量数据时非常有用,尤其是对于Web应用中的数据展示。常用的...
此外,Ibatis还支持使用`<foreach>`标签来简化批量插入的XML配置,这在处理复杂场景时会更加方便。 了解这些知识点后,你可以根据具体项目需求灵活运用,提升数据库操作的效率。同时,对于源码的研究也能帮助我们更...
总结来说,Ibatis批量存储涉及到iterate和foreach标签的使用,以及批处理的策略,它们都是为了更高效地处理大量数据。同时,HashMap的使用则为传递复杂参数提供了便利。熟练掌握这些知识点,可以有效地优化数据库...
公司的大部分项目都开始使用IBatis作为O/R Mapping了,但是在使用的过程中也发现了很多不方便和存在争议的地方,其中一个不方便的地方就是分页,目前的处理方式都是在sqlMap中写针对特定数据库的物理分页Sql语句,对于...
最近想在最新的Spring5.0中集成ibatis(不是mybatis),发现已经不在支持SqlmapClientTemplate和SqlmapClientFactoryBean,于是搞了这个工具jar来进行支持如下配置 ...
在Ibatis中,批量操作提供了更高效、更灵活的方式处理大量数据。理解并熟练应用这些技巧,能显著提升应用程序的性能和可维护性。在实际项目中,根据具体需求选择合适的批量操作策略,并合理优化,可以大大降低系统...
在本文中,我们将深入探讨iBatis框架中的“ibatis批量”功能,特别是如何利用iBatis进行批量数据处理,包括批量插入、更新和删除操作。我们将通过解析提供的文件片段来阐述这一知识点,重点放在如何使用`<iterate>`...
Ibatis对枚举类型的原生支持可能不如实体类那样直观,但通过一些策略,我们可以实现枚举与数据库字段之间的映射。以下将详细解释如何在Ibatis中处理枚举类型。 首先,我们需要定义枚举类。枚举类通常包含若干枚举...
在这个例子中,`ids`参数是一个逗号分隔的字符串,如`"15,16"`,iBatis会自动处理这个字符串,将其转化为`IN (15, 16)`的SQL片段,从而实现批量删除。 ### 第二种方法:利用`iterate`标签的批量删除 第二种方法是...
Spring与iBATIS的集成 iBATIS似乎已远离众说纷纭的OR框架之列,通常人们对非常流行的Hibernate情有独钟。但正如Spring A Developer's Notebook作者Bruce Tate 和Justin Gehtland所说的那样,与其他的OR框架相比...
ibatis支持动态SQL的功能,这使得在构建SQL语句时可以更加灵活。在提供的代码片段中,使用了`<isNotEmpty>`标签来动态判断条件是否为空,并且通过`<CDATA>`标签来编写SQL片段。这种方式可以避免硬编码SQL语句,提高...
然而,Ibatis不直接支持JTA,而是依赖于Spring框架或MyBatis-Spring集成来实现事务控制。 描述中提到的“NULL”可能表示这篇博文详细讨论了如何在Ibatis中集成Spring进行事务管理。Spring框架提供了一种声明式事务...
3. **方言支持**:实现 iBatis 的 `Dialect` 接口,为每种数据库提供特定的方言类,处理如分页、排序等数据库特有语法。 4. **事务管理**:根据不同的数据库特性配置合适的事务隔离级别和回滚规则,确保事务的一致...
在处理批量更新或插入操作时,数组作为输入参数变得尤为重要。iBATIS通过`<iterate>`标签支持数组的遍历,将数组中的每个元素作为独立的值插入到SQL语句中。例如,`(" close=")" conjunction=",">`这段代码会将`...
Executor执行器是iBatis的核心组件,它负责SQL的执行和结果的处理。Executor分为两种类型:SimpleExecutor和CachingExecutor,前者用于基本的SQL执行,后者增加了缓存功能。Executor通过`StatementHandler`来处理预...