背景:一次性导出几十万条数据到excel,此时的导出效率会严重损失。
解决方法: 用ibatis中的RowHandler,一次只处理一条数据,内存中只保持一条数据,导出时每5万条创建一个sheet
具体实现方法:
MyRowHandler处理类:
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import com.ibatis.sqlmap.client.event.RowHandler;
public class MyRowHandler implements RowHandler {
HSSFWorkbook wb;
HSSFSheet sheet ;
HSSFRow row;
HSSFCell cell;
int dataNum=0;
int rowStart = 1;
@Override
public void handleRow(Object arg0){
dataNum++;
if(dataNum%50000==0){
//每5万条记录分页
setSheet();
}
Map map = (Map)arg0;
//在这里处理逻辑,插入数据到excel
System.out.println(map.get("key"));
System.out.println(map.get("value"));
}
public HSSFWorkbook getWb() {
return wb;
}
public void setWb(HSSFWorkbook wb) {
this.wb = wb;
setSheet();
}
public void setSheet(){
this.sheet= wb.createSheet();
rowStart = 1;
//写表头
writeHeader();
}
public void writeHeader(){
String[] header = {"ID","类型"};
row = sheet.createRow(0);
int n=0;
for (String head : header) {
cell = row.createCell((short) n);
HSSFRichTextString str = new HSSFRichTextString(head);
cell.setCellValue(str);
n++;
}
}
}
action中执行:
public String execute(){
String fileName="F:\\05-JAVA\\测试.xls";
HSSFWorkbook wb = new HSSFWorkbook();
MyRowHandler handler = new MyRowHandler();
handler.setWb(wb);
DaoFactory.getIbatisDao().getSqlMapClientTemplate().queryWithRowHandler("term.base", handler);
wb = handler.getWb();
OutputStream os = null;
try {
os = new FileOutputStream(fileName);
wb.write(os);
}catch(Exception e){
}finally{
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return "success";
}
分享到:
相关推荐
### ibatis SQL语句对条件中特殊字符% # 处理 在开发过程中,经常会遇到SQL查询时需要处理字符串中的特殊字符的情况。特别是在使用类似`LIKE`这样的操作符时,如果用户输入的数据中含有`%`、`_`或`#`等特殊字符,...
通过上述步骤,我们可以在ibatis中实现高效的批量更新操作,极大地提升系统处理大规模数据的能力。这种方法不仅适用于Java环境下的开发,也适用于其他支持ibatis的编程语言。总之,ibatis提供的批量更新功能是处理...
Struts2、Spring和iBatis是Java Web开发中常用的三大框架,它们分别负责MVC模式中的Action层、业务逻辑层和数据访问层。在这个项目中,“struts2_spring_ibatis根据模板文件导出Excel”是利用这三大框架实现了一个...
总结来说,`<iterate>`标签是iBatis中处理集合数据的重要工具,它简化了SQL语句的构建,提高了代码的可读性和可维护性。在实际开发中,合理利用`<iterate>`可以极大地提高工作效率,并降低出错概率。
教程中还会详细讲解如何在iBATIS中定义和执行存储过程,包括输入参数、输出参数和结果集的处理。同时,这份教程可能还涵盖了异常处理、事务管理以及性能优化等相关内容。 **iBATIS存储过程调用** 在iBATIS中调用...
jxl结合IBATIS,导出EXCEL。读取EXCEL模板,把数据写到新的EXCEL中。sql语句中要起别名,别名第一位为字母,第二位包括第二位要是整数数字,这个数字决定插入到excel表格中的位置,决定插入的是那一列。EXCEL模板中...
在这个过程中,Ibatis会自动处理参数绑定、结果集映射等细节,极大地提高了开发效率。同时,由于SQL语句与Java代码的分离,使得SQL的优化和维护变得更加容易。 对于MySQL数据库,Ibatis提供了很好的支持,包括对...
7. **事务管理**:由于CLOB操作可能会涉及到较大的数据量,确保正确设置事务的隔离级别和回滚规则,以防止数据不一致。 综上所述,通过iBATIS操作Oracle的CLOB数据,需要对iBATIS的映射文件、类型处理器以及Oracle...
- 使用`EXISTS`子查询通常比直接关联查询更高效,尤其是在数据量大的情况下。 - 避免在`WHERE`子句中使用多个条件或`OR`操作符,而是应该使用`IN`操作符或者`UNION ALL`合并多个查询。 3. Struts、Spring与Ibatis...
Ibatis是一个轻量级的持久层框架,它允许开发者将SQL语句直接写在XML配置文件或者Java注解中,从而提供了灵活的数据访问方式。在Ibatis中,事务管理是至关重要的,因为它确保了数据库操作的一致性和可靠性。 事务...
-事务管理:讨论如何在iBatis .NET中处理事务,包括手动和自动事务控制。 - 故障排查:提供常见问题的解决方案和最佳实践。 通过阅读这份文档,开发者可以了解到iBatis .NET的完整功能,学会如何在.NET项目中有效...
总的来说,"ibatis_with_memcached"项目提供了一个实用的参考,展示了如何在实际开发中利用Ibatis与Memcached集成来优化数据访问,对于提升Java Web应用的性能具有很大的指导价值。开发者可以通过该项目学习到缓存...
在iBATIS中,DAO层可以帮助你创建可重用的对象,这些对象可以直接执行SQL查询并处理结果。这个文档会详细介绍如何创建和使用DAO类,以及如何将它们集成到你的项目中,以实现高效且灵活的数据访问。 最后,`iBATIS-...
在学习这部分时,你会了解如何在SQL中添加分页条件,以及如何在Java代码中处理分页结果。 "spring+iBatis处理1对多数据表实例"展示了如何将iBatis与Spring框架集成,实现更高级的数据操作。Spring的依赖注入可以...
iBatis提供了批处理功能,可以在一次数据库连接中执行多个SQL语句,这极大地提高了处理大量数据时的性能。iBatis通过`SqlMapClient`接口提供了几个关键方法来实现批处理: 1. **`startBatch()`**:开始批处理。 2. ...
在多表查询中,Ibatis 提供了多种方式来处理复杂的关联查询,包括一对一、一对多、多对一和多对多等关系。在这个例子中,我们将探讨如何在 Ibatis 中实现一对多的关系查询。 首先,我们创建了两个表:`book` 和 `...
iBATIS提供了集合映射和关联映射的方式来处理这些关系,使我们能够在Java对象中方便地操作这些复杂的数据结构。 其次,属性设置详解涉及到的是如何在iBATIS中设置和获取Java对象的属性,以及如何将这些属性与数据库...
通过以上步骤,我们可以有效地处理Ibatis中的乱码问题。在实际开发中,一定要注意数据编码的一致性,从数据库到应用程序,再到用户界面,每个环节都要做好编码的匹配和转换工作。对于`ibatisdemo`这个项目,你可以...