`
newslxw
  • 浏览: 208793 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

hibernate导出到数据量的方法

 
阅读更多

在需要将数据导出的地方,由于数据量大,将数据放到内存会导致内存爆掉,所以不能使用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;
    }
 
分享到:
评论

相关推荐

    Hibernate实践例子程序

    Hibernate 是一个开源的O/R mappimg的框架,基于JDBC提供了一种持久性数据管理的方案,相对于EntityBean来说是相当轻量级的。由于Hibernate是基于 JDBC的,所以它的数据库查寻的能力相对于CMP来说也是异常强大的,...

    Hibernate_Tools_for_eclipse_HbmTool.rar

    完成后,你就可以在Hibernate Configuration视图窗口看到配置项,已经链接到数据,并把你数据库中的表列出来,如果在这一步你没有成功的话,请检查你是否以正确安装的Hibernate Tools和JBoos Tools这个很重要;...

    Documentary:活动纪实平台(Documentary platform) springboot,hibernate, swagger,maven组合开发而成的活动纪实平台,包括以下主要功能。 活动上传 支持活动的文字图片上传,上级审批之后进行展示。 活动统计,数据导出excel 每个单位活动发布量,不同级别,划分维度活动发布量统计,excel实时导出。 多级用户管理 支持4级用户的管理。 pc,移动端自适应显示

    活动纪实平台 springboot,hibernate, swagger,maven组合开发而成的活动纪实...每个单位活动发布量,不同级别,划分维度活动发布量统计,excel实时导出。 多级用户管理 支持4级用户的管理。 pc,移动端自适应显示。

    java开源包5

    可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL...

    DBKING使用指南

    在dbking中,所有的数据库数据只有五种数据类型,String、Number(BigDecimal)、Timestamp、Clob(String)、Blob(byte[]),经过反复测试后,我们会例出各种数据库数据类型到这五种类型的映射表,当然我们也有...

    房地产销售管理系统

    方便快捷,支持通过Excel文件批量导入导出各种数据,实现与第三方软件的无缝连接; 针对各种房地产公司的房产销售情况进行量身定做,对房产销售各个环节,节点实时控制;从而提高 公司的运营效率,特别是提高公司...

    房地产销售管理系统V3.0

    方便快捷,支持通过Excel文件批量导入导出各种数据,实现与第三方软件的无缝连接; 针对各种房地产公司的房产销售情况进行量身定做,对房产销售各个环节,节点实时控制;从而提高 公司的运营效率,特别是提高公司...

    配电线路智能巡检系统.pdf

    Hibernate 是一个开放源代码的对象关系映射框架,对 JDBS 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。 Spring 是一个轻量级的控制反转(IOC)和面向切面(AOP)的...

    jeecg-framework-3.1.0.RELEASE

    JEECG V3.0版本采用SpringMVC+Hibernate+UI快速开发库 的基础架构,采用面向声明的开发模式, 基于泛型编写极少代码即可实现复杂的数据展示、数据编辑、 表单处理等功能,再配合代码生成器的使用,将J2EE的开发效率...

    大数据培训课程安排.pdf

    ⼤数据培训课程安排 ⼤数据发展如⽕如荼,近年来,许多⼩伙伴都加⼊了⼤数据学习的⼤军,是⾃学还是参加专业的⼤数据培训,成了⼤家谈论的话题,但重点 是,不管是⾃学⼤数据技术还是参加⼤数据培训,都要有⼀个好的...

    java开源包1

    可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL...

    java开源包11

    可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL...

    java开源包2

    可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL...

    java开源包3

    可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL...

    java开源包6

    可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL...

    java开源包10

    可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL...

    java开源包4

    可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL...

    java开源包8

    可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL...

Global site tag (gtag.js) - Google Analytics