資料來源:http://www.javaworld.com/javaworld/jw-07-2008/jw-07-orm-comparison.html
目前Java關於persistence的Framework主要有iBATIS、JPA和Hibernate三種,這篇文章簡單地介紹了如何選擇這三種framework來做persistence的處理。
他們之間的主要差異在於,iBAITS並沒有提供完整的O/R mapping,它所做的是Object與 SQL return result之間的mapping。而且iBAITS運作時,是直接使用內嵌的SQL來查詢資料庫,所以Programmer必需直接撰寫SQL,且必需綁定在資料庫伺服器的提供商。不過這種設計,programmer可以直接掌控SQL,所以能不斷tune出效能最好的SQL
Hibernate及JPA都有完整的O/R mapping的功能,它們都不直接採用SQL,而是有自己的查詢語言(雖然長得很像SQL),在執行時期再動態產生SQL進行資料庫查詢。也因為如此,使用其所開發的程式,不會有綁定在某家資料庫系統的問題。相較於Hibernate,JPA提供的是一組標準,任何provider都可以去實作JPA標準(如Apache的 OpenJPA),因此實際執行的效能及一些特性就必需看各家JPA provider實作的程度如何;而Hibernate本身就是一個實作,算是目前滿活躍的一個framework,有許多人在使用及維護。
最後iBAITS支援.NET、及Ruby on Rails;Hibernate支援Java及.NET;而JPA(Java Persistence API)當然只支援Java
Features | iBATIS | Hibernate | JPA |
Simplicity | Best | Good | Good |
Complete ORM solution | Average | Best | Best |
Adaptability to data model changes | Good | Average | Average |
Complexity | Best | Average | Average |
Dependence on SQL | Good | Average | Average |
Performance | Best | Best | N/A * |
Portability across different relational databases | Average | Best | N/A * |
Portability to non-Java platforms | Best | Good | Not Supported |
Community support and documentation | Average | Good | Good |