OpenJPA与Hibernate实现JPA的性能…

本文通过具体的测试代码对比了OpenJPA与Hibernate在插入、查询、更新及删除等操作上的性能表现,并分析了两者之间的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目移植到OpenJPA后一直使用都很不错,最近看了http://www.iteye.com/topic/777470受到一些启发,基于自己的项目也做了一下测试。

 

1、测试代码:

Java代码 复制代码  收藏代码OpenJPA与Hibernate实现JPA的性能测试
  1. long t1 System.currentTimeMillis();   
  2. qtServ.test();   
  3. long t2 System.currentTimeMillis();   
  4. System.out.println("总耗时:" String.valueOf(t2 t1));  
    long t1 = System.currentTimeMillis();
    qtServ.test();
    long t2 = System.currentTimeMillis();
    System.out.println("总耗时:" + String.valueOf(t2 - t1));
Java代码 复制代码  收藏代码OpenJPA与Hibernate实现JPA的性能测试
  1. public void test() {   
  2.   long t1, t2;   
  3.   t1 System.currentTimeMillis();   
  4.   for (int 010000i++) {   
  5.     TXx txx new TXx();   
  6.     txx.setXxMc("测试名称" i);   
  7.     txx.setXxDm("测试代码" i);   
  8.     txx.setXxLx("测试类型" i);   
  9.     txx.setXxXh(i);   
  10.     txxDAO.save(txx);   
  11.   }   
  12.   t2 System.currentTimeMillis();   
  13.   System.out.println("插入10000条记录耗时:" String.valueOf(t2 t1));   
  14.   
  15.   t1 System.currentTimeMillis();   
  16.   List ls txxDAO.findAll();   
  17.   t2 System.currentTimeMillis();   
  18.   System.out.println("查询10000条记录耗时:" String.valueOf(t2 t1));   
  19.   
  20.   t1 System.currentTimeMillis();   
  21.   List ls2 txxDAO.findAll();   
  22.   t2 System.currentTimeMillis();   
  23.   System.out.println("重复查询10000条记录耗时:" String.valueOf(t2 t1));   
  24.   
  25.   t1 System.currentTimeMillis();   
  26.   for (TXx txx ls) {   
  27.     TXx txxDAO.getByID(txx.getXxId());   
  28.   }   
  29.   t2 System.currentTimeMillis();   
  30.   System.out.println("逐个查询10000条记录耗时:" String.valueOf(t2 t1));   
  31.   
  32.   t1 System.currentTimeMillis();   
  33.   for (TXx txx ls) {   
  34.     txx.setXxMc(txx.getXxMc() "修改后");   
  35.     txxDAO.update(txx);   
  36.   }   
  37.   t2 System.currentTimeMillis();   
  38.   System.out.println("修改10000条记录耗时:" String.valueOf(t2 t1));   
  39.   
  40.   t1 System.currentTimeMillis();   
  41.   for (TXx txx ls) {   
  42.     txxDAO.delete(txx);   
  43.   }   
  44.   t2 System.currentTimeMillis();   
  45.   System.out.println("逐条删除10000条记录耗时:" String.valueOf(t2 t1));   
  46.  
  public void test() {
    long t1, t2;
    t1 = System.currentTimeMillis();
    for (int i = 0; i < 10000; i++) {
      TXx txx = new TXx();
      txx.setXxMc("测试名称" + i);
      txx.setXxDm("测试代码" + i);
      txx.setXxLx("测试类型" + i);
      txx.setXxXh(i);
      txxDAO.save(txx);
    }
    t2 = System.currentTimeMillis();
    System.out.println("插入10000条记录耗时:" + String.valueOf(t2 - t1));

    t1 = System.currentTimeMillis();
    List ls = txxDAO.findAll();
    t2 = System.currentTimeMillis();
    System.out.println("查询10000条记录耗时:" + String.valueOf(t2 - t1));

    t1 = System.currentTimeMillis();
    List ls2 = txxDAO.findAll();
    t2 = System.currentTimeMillis();
    System.out.println("重复查询10000条记录耗时:" + String.valueOf(t2 - t1));

    t1 = System.currentTimeMillis();
    for (TXx txx : ls) {
      TXx t = txxDAO.getByID(txx.getXxId());
    }
    t2 = System.currentTimeMillis();
    System.out.println("逐个查询10000条记录耗时:" + String.valueOf(t2 - t1));

    t1 = System.currentTimeMillis();
    for (TXx txx : ls) {
      txx.setXxMc(txx.getXxMc() + "修改后");
      txxDAO.update(txx);
    }
    t2 = System.currentTimeMillis();
    System.out.println("修改10000条记录耗时:" + String.valueOf(t2 - t1));

    t1 = System.currentTimeMillis();
    for (TXx txx : ls) {
      txxDAO.delete(txx);
    }
    t2 = System.currentTimeMillis();
    System.out.println("逐条删除10000条记录耗时:" + String.valueOf(t2 - t1));
  }

 

项目使用JPA2.0,除只是在JPA的实现中使用不同的包,其他完全相同

由于缓存的配置项目不同,不太好做对比,因此本次测试只配置了基础的JPA项目即连接地址、帐号、密码。

项目在Eclipse中以debug模式运行

由于OpenJPA使用了增强,这里用的是在tomcat运行时加入org.springframework.instrument-3.0.3.RELEASE.jar

 

测试方法,导入项目立刻debug,待tomcat启动完成即开始连续5次测试,将测试结果分别记录

 

测试结果


OpenJPA与Hibernate实现JPA的性能测试

分析对比结果


OpenJPA与Hibernate实现JPA的性能测试


 结论:

这个也太协会了,OpenJPA的插入执行效率和Hibernate的查询执行效率也……

个人觉得是不是我的测试构造的不完善,为什么会有这么大的反差,但是多少也说明了OpenJPA执行效率在2.0后有了较高的提升。在项目中开启缓存后从使用情况来看还是不错的。当然我还是觉得这个测试不完善,请高手帮忙解惑……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huangleijay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值