主流 Java ORM 框架有哪些?
ORM 是 Object Relational Mapping 的縮寫,譯為 “對象關系映射” 框架。
所謂的 ORM 框架就是一種為了解決面向對象與關系型數據庫中數據類型不匹配的技術,它通過描述 Java 對象與數據庫表之間的映射關系,自動將 Java 應用程序中的對象持久化到關系型數據庫的表中。
ORM 框架是一種數據持久化技術,即在對象模型和關系型數據庫之間建立起對應關系,並且提供一種機制,可通過 JavaBean 對象操作數據庫表中的數據,如圖 1 所示。
圖 1:ORM 映射關系
在實際開發中,程序員使用面向對象的技術操作數據,而存儲數據時,使用的卻是關系型數據庫,這樣就造成了很多不便。ORM 可以在對象模型和關系型數據庫的表之間建立一座橋梁,程序員使用 API 直接操作 JavaBean 對象就可以實現數據的存儲、查詢、更改和刪除等操作。
MyBatis 框架通過簡單的 XML 或注解進行配置和原始映射,將實體類和 SQL 語句之間建立起映射關系,是一種半自動化的 ORM 實現。
主流的 Java ORM 框架
當前 Java ORM 框架產品有很多,常見的框架有 Hibernate 和 MyBatis,其主要區別如下。
1) Hibernate
Hibernate 框架是一個全表映射的框架。通常開發者只要定義好持久化對象到數據庫表的映射關系,就可以通過 Hibernate 框架提供的方法完成持久層操作。
開發者並不需要熟練地掌握 SQL 語句的編寫,Hibernate 框架會根據編制的存儲邏輯,自動生成對應的 SQL,並調用 JDBC 接口來執行,所以其開發效率會高於 MyBatis 框架。
然而 Hibernate 框架自身也存在一些缺點,例如:
- 多表關聯時,對 SQL 查詢的支持較差;
- 更新數據時,需要發送所有字段;
- 不支持存儲過程;
- 不能通過優化 SQL 來優化性能。
這些問題導致其只適合在場景不太復雜且對性能要求不高的項目中使用。
Hibernate 官網:http://hibernate.org/
2) MyBatis
MyBatis 框架是一個半自動映射的框架。這里所謂的 “半自動” 是相對於 Hibernate 框架全表映射而言的,MyBatis 框架需要手動匹配提供 POJO、SQL 和映射關系,而 Hibernate 框架只需提供 POJO 和映射關系即可。
與 Hibernate 框架相比,雖然使用 MyBatis 框架手動編寫 SQL 要比使用 Hibernate 框架的工作量大,但 MyBatis 框架可以配置動態 SQL 並優化 SQL、通過配置決定 SQL 的映射規則,以及支持存儲過程等。對於一些復雜的和需要優化性能的項目來說,顯然使用 MyBatis 框架更加合適。
MyBatis 框架可應用於需求多變的互聯網項目,如電商項目;Hibernate 框架可應用於需求明確、業務固定的項目,如 OA 項目、ERP 項目等。
MyBatis 3 中文文檔:https://mybatis.org/mybatis-3/zh/