项目移植到OpenJPA后一直使用都很不错,最近看了http://www.iteye.com/topic/777470受到一些启发,基于自己的项目也做了一下测试。
1、测试代码:
- long
t1 = System.currentTimeMillis(); - qtServ.test();
- long
t2 = System.currentTimeMillis(); - System.out.println("总耗时:"
+ String.valueOf(t2 - t1));
long t1 = System.currentTimeMillis(); qtServ.test(); long t2 = System.currentTimeMillis(); System.out.println("总耗时:" + String.valueOf(t2 - t1));
- 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)); - }
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的查询执行效率也……
个人觉得是不是我的测试构造的不完善,为什么会有这么大的反差,但是多少也说明了OpenJPA执行效率在2.0后有了较高的提升。在项目中开启缓存后从使用情况来看还是不错的。当然我还是觉得这个测试不完善,请高手帮忙解惑……