有沒有辦法讓程序員徹底拋棄書寫SQL思想,完全的使用面向對象思想開發軟件呢?
需要一種可行的ORM框架。
什么是ORM?
不同的數據庫使用的SQL語法不同,比如PL/SQL(Oracle)和T/SQL(SQL SERVER);
同樣的功能不同的數據庫有不同的實現方式;
程序過分依賴SQL對程序的移植性及擴展維護等帶來很大的麻煩。
ORM框架包括Entity EJB、Hibernate、iBATIS、TopLink等,很多公司還開發了自己的ORM框架來解決項目的持久化。然而每種ORM框架都有自己的語法,他們之間不能直接通用。
對開發者而言,很多數據庫持久化的的操作都是類似的,項目中采取的框架不同會造成代碼的重復性。那么有沒有辦法來改善這種情況呢?
回想JDBC可以作為為多種關系數據庫提供相同的訪問方式,使開發人員方便於編寫數據庫應用程序。那么是不是可以有一種規范可以像JDBC一樣提供不同ORM框架的統一規范。
Sun公司為了簡化現有Java EE和Java SE應用的對象持久化的開發工作,整合ORM技術,結束現在Hibernate、iBATIS、TopLink等ORM框架各自為營的局面,提出了新的JPA ORM規范。
1) JPA為POJO提供持久化標准規范。
2) JPA的使用:
Hibernate與TopLink以及OpenJpa都提供了JPA的實現。
3) JPA主要技術:
JPA的總體思想和現有Hibernate、TopLink、JDO等ORM框架大體一致。總的來說,JPA包括以下三方面的技術:
A. ORM映射元數據:JPA通過注解或XML描述映射關系,並將運行中的實體對象持久化到數據庫中。
B. JPA持久化API:使用面向對象的思想,操作實體對象,進行增刪改查的操作。至於怎么操作,由框架思考這件事。這必將大大的節省了開發時間,提 高了開發效率。
C. 查詢語言:使用面向對象的思想避免了同程序的SQL語句產生交集。
4) JPA與Hibernate
注意,前面說過了,JPA是統一了各種ORM框架的接口,所以說,可以把JPA理解為它並不是新的ORM框架,是接口,是規范,是工具。就像JDBC不是數據庫一樣,也沒有辦法代替數據庫。同理,JPA也不是ORM框架,我們可以透過JPA使用各種ORM,實現各項目之間的移植性,這是做到低耦合、可擴展的程序設計。
Hibernate是ORM框架,它實現了JPA的規范。
實現JPA接口也並不意味着可以替代Hibernate,Hibernate的索引功能,緩存功能並沒有相應的接口,所以有些時候還是需要Hibernate的。但是!凡是JPA能實現的功能都用JPA來實現,以此來減少框架之間的耦合性。
PS:本人也在不斷的學習中,這是在翻看了各種Hibernate,ORM,JPA資料后做出的總結,如果有不恰當的地方歡迎指出,大家互相交流,共同進步!