zoukankan      html  css  js  c++  java
  • Hibernate的批量处理和分页技术、投影技术

    投影查询——过滤部分字段
    返回的List集合元素为Object[]

    Query query = session.createQuery("select c.cname, c.csex from Customer c");
    List list = query.list();
    Iterator iter = list.iterator();
    Object[] objs = null;
    while(iter.hasNext()){
    objs = (Object[]) iter.next();
    for(int i = 0; i < objs.length; i ++){
    System.out.println(objs[i]);
    System.out.println("-------------------");
    

    分页查询
     返回的list集合元素是Object

          Query query = session.createQuery("SELECT c FROM Customer c left join c.orders o where c.id=1");
    	  query.setMaxResults(2);//设置每次查询最多查询多少记录,简单来说就是页大小
    	  query.setFirstResult(2);//设置每次查询的开始位置,
    	  Iterator iter = query.list().iterator();
    	  while (iter.hasNext()) {
    		System.out.println(((Customer)iter.next()));
    	  }
    

    批量处理

         @Test
    	public void testBatchDealWith(){
    		for(int i = 0; i <10000; i ++){
    		Customer customer=new Customer();
    		customer.setCustomerName("jeremy"+i);
    		session.save(customer);
    		if(i==20||i==40){
    			System.out.println("--------------------------");
    		}
    		}
    	}
    

    因为默认情况下,Hibernate会缓存所有的持久对象在session级别的缓存,并最终应用程序会失败并发生OutOfMemoryException某处50,000条记录左右。如果使用的是批量处理与Hibernate解决这个问题。

    要使用批量处理功能,首先设置hibernate.jdbc.batch_size为批量大小若干无论是在20或50根据对象的大小。这将告诉每X行插入批次hibernate的容器。为了实现这个在代码中,我们需要做一点修改如下:

    @Test
    public void testBatchDealWith(){
    		
    	for(int i = 0; i <10000; i ++){
    	  Customer customer=new Customer();
    	  customer.setCustomerName("jeremy"+i);
    	  session.save(customer);
                if(i==50){
    		 session.flush();
    		 session.clear();
    	    }
    	}
    }    
    
    <property name="hibernate.jdbc.batch_size">20</property>

    这样运行速度会得到很好的提升

  • 相关阅读:
    MySql清空所有表数据【慎用】
    积分墙已死?积分墙冲榜失效?请看看别人怎么玩转积分墙!
    [转]小心PHP的类定义顺序与继承的问题
    [转]PHP中替换换行符
    [转]php的public、protected、private三种访问控制模式的区别
    [转]Zend Studio中将tab转换为4个空格
    PHP预定义常量
    PHP Unit资料收集
    『Python』setup.py简介
    『计算机视觉』Mask-RCNN_项目文档翻译
  • 原文地址:https://www.cnblogs.com/jeremy-blog/p/4417534.html
Copyright © 2011-2022 走看看