`
sdkd_Tiger
  • 浏览: 26166 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

iBatis中RowHandler处理大数据量的导出

    博客分类:
  • Web
阅读更多

背景:一次性导出几十万条数据到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";
	}
分享到:
评论

相关推荐

    传送带中大块煤识别检测数据集,使用yolov5pytorch格式对792张图片标注

    传送带中大块煤识别检测数据集,使用yolov5pytorch格式对792张图片标注,标注图片和标注信息可参考博文:https://backend.blog.csdn.net/article/details/144513245

    整体风格与设计理念 整体设计风格简约而不失优雅,采用了简洁的线条元素作为主要装饰,营造出一种现代、专业的视觉感受 配色上以柔和的色调为主,搭配少量鲜明的强调色,既保证了视觉上的舒适感,又能突出重点内容

    整体风格与设计理念 整体设计风格简约而不失优雅,采用了简洁的线条元素作为主要装饰,营造出一种现代、专业的视觉感受。配色上以柔和的色调为主,搭配少量鲜明的强调色,既保证了视觉上的舒适感,又能突出重点内容,使整个演示文稿在视觉上具有较强的吸引力和辨识度。 页面布局与内容结构 封面:封面设计简洁大方,“MORIMOTO” 和 “SENYAN” 字样增添了独特的标识性,可根据实际需求替换为汇报人姓名或公司名称等信息,让演示文稿从一开始就展现出专业与个性。 目录页:清晰列出 “工作内容回顾”“工作难点分析”“市场状况概述”“工作目标计划” 四个主要板块,方便观众快速了解演示文稿的整体架构和主要内容,为后续的详细展示做好铺垫。 工作内容回顾页(PART.01):提供了充足的空间用于详细阐述工作内容,可通过复制粘贴文本并选择只保留文字的方式,方便快捷地填充内容,建议使用微软雅黑字体以保证整体风格的一致性。无论是列举日常工作任务、项目执行细节还是工作成果总结,都能清晰呈现,让观众对工作内容有全面而深入的了解。 工作难点分析页(PART.02):这部分页面设计注重实用性,文本框可自由拉伸,方便根据工作难

    Python3数据分析与挖掘建模实战 学习代码开发

    python 【项目资源】:包含前端、后端、移动开发、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源,毕业设计等各种技术项目的源码。包括C++、Java、python、web、C#、EDA等项目的源码。 【适用人群】:适用于希望学习不同技术领域的初学者或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    【独家首发】基于matlab引力搜索算法GSA优化Transformer-BiLSTM负荷数据回归预测【Matlab仿真 6585期】.zip

    CSDN Matlab研究室上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【BP回归预测】基于matlab凌日算法优化BP神经网络TSOA-BP光伏数据预测(多输入单输出)【Matlab仿真 5170期】.zip

    CSDN Matlab研究室上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    基于java的门禁管理系统源代码(完整前后端+mysql+说明文档+LW).zip

    本系统主要包括两个角色:管理员、员工。 1.进出通道的权限:对每个通道设置哪些人可以进出,哪些人不能进出 2.门禁系统:进出方式:输入密码 3.进出通道的时段:就是设置可以该通道的人在什么时间范围内可以进出 4.出入记录查询功能:系统可储存所有的进出记录、状态记录,可按不同的查询条件查询 环境说明: 开发语言:Java,jsp JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea 部署容器:tomcat

    【ESN回归预测】基于matlab粒子群算法优化回声状态网络PSO-ESN数据回归预测【Matlab仿真 4383期】.zip

    【ESN回归预测】基于matlab粒子群算法优化回声状态网络PSO-ESN数据回归预测【Matlab仿真 4383期】

    玻璃盖板全球市场研究报告:2023年年复合增长率高达12.67%

    玻璃盖板全球市场研究报告:2023年年复合增长率高达12.67% 在科技日新月异的今天,玻璃盖板作为触控显示屏的重要部件,不仅承载着保护屏幕的重任,更以其卓越的性能和多样化的应用,成为连接科技与生活的桥梁。从智能手机到汽车电子,从工业控制到医疗器械,玻璃盖板无处不在,市场需求持续增长。然而,面对激烈的市场竞争和不断变化的用户需求,企业如何把握市场脉搏,实现创新发展? 市场概况 近年来,全球玻璃盖板市场呈现出蓬勃发展的态势。据QYR最新调研,2016年至2023年,全球玻璃盖板市场规模由116.2亿美元增长至267.6亿美元,年复合增长率高达12.67%。在国内市场,随着国产品牌智能手机出货量的稳步上升,以及应用领域的不断扩大,国产盖板玻璃取得了较大市场份额。我国玻璃盖板整体市场规模也由2016年的397.1亿元增长至2023年的788.6亿元,展现出强劲的增长势头。 技术创新与趋势 技术创新是推动玻璃盖板行业发展的核心动力。在加工领域,厂商不断引入新材料,改进生产工艺,持续提升玻璃盖板的性能。如耐磨性、耐高温性、防眩光性、防反射性、抗菌性等特性的提升,使得玻璃盖板更加适应市场需求。同时

    【故障诊断】基于matlab黑猩猩算法优化双向时间卷积神经网络ChOA-V2-BiTCN轴承数据故障诊断【Matlab仿真 5080期】.zip

    CSDN Matlab研究室上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    深圳混泥土搅拌站环境安全管理制度.docx

    深圳混泥土搅拌站环境安全管理制度

    人脸疲劳图像目标检测数据【已标注,约10,000张数据,YOLO 标注格式】

    人脸疲劳图像目标检测数据【已标注,约10,000张数据,YOLO 标注格式】 类别个数【2】:drowsy、undrowsy【具体参考classes文件】 数据集做了训练集、验证集划分,如果想要可视化数据,运行show脚本即可。 yolov5的改进实战:https://blog.csdn.net/qq_44886601/category_12605353.html 【更多图像分类、图像分割(医学)、目标检测(yolo)的项目以及相应网络的改进,可以参考本人主页:https://blog.csdn.net/qq_44886601/category_12803200.html】

    【故障诊断】基于matlab鹈鹕算法优化双向时间卷积神经网络POA-BiTCN轴承数据故障诊断【Matlab仿真 5106期】.zip

    CSDN Matlab研究室上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    第七章:循环控制语句 包含循环写星星 循环写乘法表 循环累加计算

    所有例程代码以及练习代码

    【温度预测】基于matlab灰狼算法优化BP神经网络GWO-BP温度预测【Matlab仿真 3422期】.zip

    CSDN Matlab研究室上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    Qt C++皮肤生成器 20套肤 26套精美界面 各种界面 一键肤 1. 自带17套精美皮肤样式,其中包括黑色、灰色、扁平等 2. 皮肤生成器只需要简单几步就可以生成一套自定义的皮肤 3. 自带了

    Qt C++皮肤生成器 20套肤 26套精美界面 各种界面 一键肤 1. 自带17套精美皮肤样式,其中包括黑色、灰色、扁平等。 2. 皮肤生成器只需要简单几步就可以生成一套自定义的皮肤。 3. 自带了26种uidemo,非常漂亮美观,涵盖了主界面布局、菜单切等各种效果,总有一款适合你。 4. 所有代码和demo注释都非常详细整齐整洁,非常适合初学者学习。 5. uidemo由简入难,可以一步步学习下去,从入门到熟悉。 6. uidemo从常规的客户端到app端到触摸端等都有,既有鼠标操作的也有触摸操作的。 7. 皮肤中的qss样式表内容,覆盖了几乎所有的控件,非常适合学习每个控件的qss样式如何设置,而且分门别类非常清晰。 8. 自带的quiwidget类,集大成之所长,超级牛逼,内置了无边框的消息框、错误框、询问框、右下角信息框、输入框、日期范围选择框等,支持倒计时关闭,集成图形字体设置方法及根据指定文字获取图片,集成CRC校验、获取应用程序文件名、文件路径、设置窗体居中显示、设置翻译文件、设置编码、设置延时、设置系统时间等各种静态方法,保你满意。 9. 支持任意Qt版本+任意编译器

    vscode的概要介绍与分析

    ### Visual Studio Code (VSCode) 资源描述 Visual Studio Code(简称 VSCode)是由微软开发的一款免费、开源的代码编辑器,支持多种编程语言,并拥有丰富的插件生态系统。它提供了智能感知、调试工具、Git 集成等功能,极大地提高了开发者的工作效率。 - **官方文档**:[VSCode 官方网站](https://code.visualstudio.com/) 提供了详尽的文档和技术支持,包括安装指南、用户手册、视频教程等。这是学习 VSCode 的最佳起点。 - **在线课程**:Coursera、Udemy 和 edX 等平台上提供了许多关于 VSCode 的课程,如《The Complete Visual Studio Code Course for Beginners》或《Full Stack Web Development with React & NodeJS》,可以帮助你从基础到高级逐步提升技能。 - **书籍**:虽然没有专门针对 VSCode 的书籍,但像《Pro Git》(作者: Scott Chacon 和 Be

    测试logicflow组件验证

    测试logicflow组件验证

    matlab仿真程序,二阶MASs,事件触发机制 这段代码是一个带有领导者的二阶多智能体的领导跟随一致性仿真 以下是对代码的分析: 1. 代码初始化了系统参数,包括邻接矩阵A、拉普拉斯矩阵L、系

    matlab仿真程序,二阶MASs,事件触发机制 这段代码是一个带有领导者的二阶多智能体的领导跟随一致性仿真。以下是对代码的分析: 1. 代码初始化了系统参数,包括邻接矩阵A、拉普拉斯矩阵L、系统的领导跟随矩阵H等。 2. 代码定义了一个二阶系统的微分方程模型,并使用RK4方法解方程。 3. 代码使用事件触发机制来控制智能体之间的通信和更新。每个智能体根据自身的位置和速度误差以及邻居智能体的误差信息来决定是否触发通信。 4. 代码通过绘制图像展示了系统的位置和速度状态、智能体在二维空间中的位置分布、控制输入和误差变化趋势等。 这段代码应用在多智能体系统的领导跟随问题中,通过控制输入和事件触发机制,实现了智能体之间的协同运动和领导者的跟随。算法的优势在于通过事件触发机制减少了通信开销,提高了系统的效率和鲁棒性。 需要注意的是,代码中的参数需要根据具体问题进行调整,包括邻接矩阵A、系统的领导跟随矩阵H、控制参数alpha、beta、lambda等。此外,代码中的事件触发条件也可以根据具体需求进行修改。 对于新手来说,从这段代码中可以学到以下几点: 1. 了解多智能体系统的领导跟

    【故障诊断】基于matlab黏菌算法优化双向时间卷积神经网络SMA-BiTCN轴承数据故障诊断【Matlab仿真 5097期】.zip

    CSDN Matlab研究室上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    322222222111111111

    322222222111111111

Global site tag (gtag.js) - Google Analytics