`
ariyue
  • 浏览: 338218 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

hibernate优化之批量处理

    博客分类:
  • java
阅读更多


最好将batch size 设置为一个适当的值一般为30-50,在大量插入的时候停止一级缓存,
   否则有可能引起内存溢出,或者每组flush一次,之后清空即可。
        在批量更新,检索时注意使用游标ScrollableResults,可以很大的提高系统效率,如果
   直接使用session可能会造成内存的溢出。
  
     大量数据的插入:
Transaction tx=null;
  Session session=null;
  session=HibernateSessionFactory.getSession();
  tx=session.beginTransaction();
  //String time1=new Date().toLocaleString();
  for(int i=0;i<100000;i++)
  {
   Customer customer=new Customer();
   customer.setUsername("zhang");
   customer.setPassword("zhang");
   if(i%20==0)
   {
    session.flush();
    session.clear();
   }
   session.save(customer);
   System.out.println(i);
  }
  tx.commit();
  //String time2=new Date().toLocaleString();
  session.close();

     批量更新:
           Session session = this.getSession();
  Transaction tx=session.beginTransaction();
  ScrollableResults customers = session.createQuery("select customer from Customer customer").setCacheMode(CacheMode.IGNORE)
    .scroll(ScrollMode.FORWARD_ONLY);
  int icount=0;
  while(customers.next())
  {
   Customer customer=(Customer)customers.get(0);
   customer.setUsername("zhang");
   System.out.println(icount);
   if(++icount%20==0)
   {
    session.flush();
    session.clear();
   }
 
  
  }
 
  tx.commit();
  session.close();


      批量更新:
      StatelessSession session=HibernateSessionFactory.getSessionFactory().openStatelessSession();
  Transaction tx=session.beginTransaction();
 
  ScrollableResults customers=session.getNamedQuery("findAll").scroll(ScrollMode.FORWARD_ONLY);
  int i=0;
  while(customers.next())
  {
   System.out.println(i++);
   Customer customer=new Customer();
   customer=(Customer) customers.get(0);
   customer.setPassword("zhang");
   session.update(customer);  //必须显示的调用update方法
  }
  tx.commit();
  session.close();
分享到:
评论
1 楼 talangniao 2008-12-05  
如果我更新的时候是修改了列表中的多条记录,传递回一个list
怎样进行批量更新

ScrollableResults customers = session.createQuery("select customer from Customer customer").setCacheMode(CacheMode.IGNORE)
    .scroll(ScrollMode.FORWARD_ONLY);

不是很理解的,能够详细讲一下吗

相关推荐

    浅析Hibernate下数据批量处理方法.doc

    不建议用Hibernate,它的insert效率实在不搞,不过最新版本的Hibernate似乎已经在批量处理的时候做过优化了,设置一些参数如batch_size,不过性能我没有测试过

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     9.4 批量处理数据  9.4.1 通过Session来进行批量操作  9.4.2 通过StatelessSession来进行批量操作  9.4.3 通过HQL来进行批量操作  9.4.4 直接通过JDBC API来进行批量操作  9.5 使用元数据  9.6 通过...

    Hibernate实战(第2版 中文高清版)

     12.2.2 利用批量处理   12.2.3 使用无状态的会话   12.3 数据过滤和拦截   12.3.1 动态数据过滤   12.3.2 拦截Hibernate事件   12.3.3 内核事件系统   12.3.4 实体监听器和回调   12.4 小结   第...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     9.4 批量处理数据  9.4.1 通过Session来进行批量操作  9.4.2 通过StatelessSession来进行批量操作  9.4.3 通过HQL来进行批量操作  9.4.4 直接通过JDBC API来进行批量操作  9.5 使用元数据  9.6 通过...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     9.4 批量处理数据  9.4.1 通过Session来进行批量操作  9.4.2 通过StatelessSession来进行批量操作  9.4.3 通过HQL来进行批量操作  9.4.4 直接通过JDBC API来进行批量操作  9.5 使用元数据  9.6 通过...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     9.4 批量处理数据  9.4.1 通过Session来进行批量操作  9.4.2 通过StatelessSession来进行批量操作  9.4.3 通过HQL来进行批量操作  9.4.4 直接通过JDBC API来进行批量操作  9.5 使用元数据  9.6 通过...

    低清版 大型门户网站是这样炼成的.pdf

    5.6 hibernate的批量处理 322 5.6.1 批量插入 322 5.6.2 批量更新 323 5.6.3 批量删除 324 5.7 hibernate的事务管理 325 5.7.1 事务边界声明 325 5.7.2 并发控制 326 5.7.3 悲观锁 327 5.7.4 乐观锁 328 ...

    Java Web程序设计教程

    第10章hibernate性能优化 208 10.1hibernate事务与并发 208 10.1.1什么是事务 208 10.1.2hibernate中的事务处理 209 10.1.3在hibernate中使用jta事务 210 10.1.4并发控制 211 10.2hibernate缓存 213 10.2.1...

    Java面试宝典2020修订版V1.0.1.doc

    36、jdbc中怎么做批量处理的? 80 37、什么是json 83 38、json与xml的区别 83 39、XML和HTML的区别? 84 40、XML文档定义有几种形式?它们之间有何本质区别? 84 41、什么是java反射机制? 84 42、hashmap的底层实现...

    基于SpringJDBC的轻量级ORM框架sborm.zip

    3、QueryBuilder:单表查询基本上都可以实现零Sql(除非查询条件特别复杂的),更新、删除等操作也可以通过QueryBuilder进行批量处理,不局限于根据主键来处理。 4、分表操作的支持:对于分表操作和常规的使用...

    JAVA上百实例源码以及开源项目

    J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理  这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失...

    JAVA上百实例源码以及开源项目源代码

    J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理  这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失...

Global site tag (gtag.js) - Google Analytics