在需要将数据导出的地方,由于数据量大,将数据放到内存会导致内存爆掉,所以不能使用list直接导出。
方法1、分页方式,一页一页到查询,每次用完也个对象,记得session.evict(obj),避免持久对象堆积
方法2、使用iterator,会产生N+1查询问题
Query query = session.createQuery(sql);
Iterator iterator = query.iterate();
out = response.getWriter();
StringBuffer bf = new StringBuffer(1000);
while(iterator.hasNext())
{
row++;
Vo obj = (Vo) iterator.next();
temp = obj.getA()+","+ obj.getB();
bf.append("\r\n" ).append(temp);
if(row % 100 == 0)
{
temp = bf.toString();
out.print(temp);
out.flush();
bf.delete(0, bf.length());
}
session.evict(obj);
}
方法3、使用ScrollableResults,这个有点类似于ResultSet,不过mysql驱动不支持,因为mysql的connect/j驱动还是会将所有数据一次性加载到内存中
public List<StockRequisition> getAllBillList(){
Session session=HibernateSessionFactory.getSession();
ScrollableResults srs=null;
String hql="select distinct s.billNumber,s.billDate,s.billState,s.department from StockRequisition as s";
List<StockRequisition> list=new ArrayList<StockRequisition>();
try{
Query q=session.createQuery(hql);
srs=q.scroll();
while(srs.next()){
StockRequisition stock=new StockRequisition();
stock.setBillNumber(srs.getString(0));
stock.setBillDate(srs.getDate(1));
stock.setBillState(srs.getString(2));
stock.setDepartment((Department)srs.get(3));
list.add(stock);
}
}catch(Exception e){
e.printStackTrace();
}finally{
srs.close();
session.close();
}
return list;
}
分享到:
相关推荐
例如,以下是一个简化的代码片段,展示了如何使用POI导出数据: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public void exportToExcel(List<DataModel>...
POI提供了API,可以创建工作簿、工作表,设置单元格的样式和公式,方便地导出数据到Excel格式,便于用户进行数据查看和分析。 6. PDF导出:Java中常用的PDF库有iText和Apache PDFBox。这些库提供了生成、编辑PDF...
这个Java demo提供了一种实用的方法来处理Excel大数据量导出的问题,它适用于那些需要高效、稳定地处理大量数据并生成Excel报告的业务场景。通过深入理解并实践这个示例,开发者可以更好地掌握Apache POI的流式API,...
例如,为了防止大量数据导入导致内存溢出,可以分批处理数据;在导出时,可以使用流式处理来减少内存消耗。此外,为了提高用户体验,还可以添加进度条显示导入导出的状态。 总之,SpringMVC、Hibernate和POI的结合...
这个压缩包文件“struts2+hibernate+spring+jfreechart+导出excel+导出pdf完美整合.zip”显然是一个整合了这些技术的示例项目,用于演示如何在实际开发中实现数据处理、视图展示以及文件导出功能。 首先,Struts2 ...
1. **性能优化**:大量数据导出可能导致内存溢出,因此可以使用流式处理或者分批导出来降低内存消耗。 2. **安全性**:防止恶意用户通过上传文件攻击系统,需要对上传文件进行安全检查和限制。 3. **异常处理**:...
在Java开发中,导出大量数据到Excel是常见的需求,特别是在数据分析、报表生成等领域。本文将深入探讨如何使用Apache POI库实现JAVA百万数据高效地导出到Excel。Apache POI是一个开源项目,它提供了读写Microsoft ...
在SSH框架中,你可能会将上述逻辑封装到一个服务或工具类中,然后在控制器中调用该服务,根据用户请求导出数据。例如,你可以创建一个ExportService,接收查询参数,执行查询,然后使用上述代码将结果写入Excel。 ...
以上技术的整合可以创建一个完整的Java企业级应用,从用户界面到数据持久化,再到复杂的报表生成和输出,实现数据的展示和导出。这种整合方式在实际项目中非常常见,可以提高开发效率,降低维护成本。通过合理地使用...
1. **数据交互**:通过Struts2接收用户请求,将请求转发给Spring管理的业务层,由Hibernate处理数据库操作,返回数据到Struts2,最后由Struts2渲染并展示给用户。 2. **数据可视化**:利用JFreeChart,开发者可能...
Hibernate 是一个开源的O/R mappimg的框架,基于JDBC提供了一种持久性数据管理的方案,相对于EntityBean来说是相当轻量级的。由于Hibernate是基于 JDBC的,所以它的数据库查寻的能力相对于CMP来说也是异常强大的,...
它无需预先加载整个Excel文件到内存,而是采用流式读写,降低了对系统资源的占用,特别适合处理大数据量的Excel文件。使用EasyExcel进行Excel导入导出,主要涉及以下几个步骤: 1. **定义实体类**:首先,我们需要...
此外,为了提高性能,可以考虑使用批处理或内存管理策略,避免一次性加载大量数据到内存。 通过这个过程,我们可以高效地将数据库中的数据导出到Excel文件,便于数据分析、报表生成或与其他系统交换数据。这种方法...
在处理大量数据时,分页查询是提高用户体验和系统性能的重要手段。在JSF中,可以通过实现一个分页组件或者利用JSF的UI组件库(如PrimeFaces或RichFaces)的分页功能。在后台,Spring和Hibernate可以配合使用...
完成后,你就可以在Hibernate Configuration视图窗口看到配置项,已经链接到数据,并把你数据库中的表列出来,如果在这一步你没有成功的话,请检查你是否以正确安装的Hibernate Tools和JBoos Tools这个很重要;...
这是一个使用Java技术栈构建的企业级项目,主要依赖于Spring MVC、Spring、Hibernate和Bootstrap框架,以及Maven作为项目管理工具。下面将详细解释这些技术及其在项目中的作用。 1. **Spring MVC**:Spring MVC是...
`@ModelAttribute` 注解用于将请求参数绑定到控制器方法的参数上,而`@Valid` 注解则用于在控制器方法调用前执行Bean Validation,确保输入数据的有效性。 视图解析是另一个关键概念,Spring MVC使用ViewResolver来...
在报表生成时,我们通常需要从数据库中查询大量数据,Hibernate可以通过其强大的查询语言HQL或者Criteria API,高效地获取并处理数据。它可以减少直接编写SQL带来的复杂性和错误,提高代码的可读性和可维护性。 ...
4. **数据库浏览器**:内置的数据库浏览器允许开发者直接在IDE中浏览和操作数据库,查看表结构、执行SQL语句、导入导出数据等。这为开发者提供了对数据库的直观视图,便于调试和数据管理。 5. **集成开发环境(IDE...
这可能是因为对于简单数据导出需求,直接操作文件流的方式更为轻量级,减少了对额外库的依赖。 2. **功能概述**: - **主页展示**:列出所有地址信息,提供导出当前页和导出全部到Excel的选项。 - **详细信息展示...