OpenJPA與Hibernate實現JPA的效能…
阿新 • • 發佈:2019-02-16
專案移植到OpenJPA後一直使用都很不錯,最近看了http://www.iteye.com/topic/777470受到一些啟發,基於自己的專案也做了一下測試。
1、測試程式碼:
Java程式碼- long t1 = System.currentTimeMillis();
- qtServ.test();
- long t2 = System.currentTimeMillis();
- System.out.println("總耗時:" + String.valueOf(t2 - t1));
- publicvoid 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後有了較高的提升。在專案中開啟快取後從使用情況來看還是不錯的。當然我還是覺得這個測試不完善,請高手幫忙解惑……