1. 程式人生 > 實用技巧 >為什麼說 Mybatis 是半自動 ORM 對映工具?它與全自動的區別在哪裡?

為什麼說 Mybatis 是半自動 ORM 對映工具?它與全自動的區別在哪裡?

Hibernate 屬於全自動 ORM 對映工具,使用 Hibernate 查詢關聯物件或者關聯集合物件時,可以根據物件關係模型直接獲取,所以它是全自動的。而 Mybatis 在查詢關聯物件或關聯集合物件時,需要手動編寫 sql 來完成,所以,稱之為半自動 ORM 對映工具。

Mybatis 是否支援延遲載入?如果支援,它的實現原理是什麼?

1,Mybatis 僅支援 association 關聯物件和 collection 關聯集合物件的延遲載入, association
指的就是一對一, collection 指的就是一對多查詢。在Mybatis配置檔案中,可以配置是否啟用延遲載入LazyLoadingEnabled=true|false。
2.他的原理是,使用CGLIB建立目標物件的代理物件,當呼叫目標方法時,進入攔截器方法,比如呼叫a.getB().getName(),攔截器invoke()

方法發現a.getB()是null值,那麼就會單獨傳送實現儲存好的查詢關聯B物件的SQL,把B查詢上來,然後呼叫a.setB(b),於是a的物件b熟悉就有值了,

接著完成a.getB().getName()方法的呼叫。這就是延遲載入的基本原理。

MyBatis 與 Hibernate 有哪些不同?

1) Mybatis 和 hibernate 不同,它不完全是一個 ORM 框架,因為 MyBatis 需要程式設計師自己
編寫 Sql 語句,不過 mybatis 可以通過 XML 或註解方式靈活配置要執行的 sql 語句,並將
java 物件和 sql 語句對映生成最終執行的 sql,最後將 sql 執行的結果再對映生成 java 對
象。
2) Mybatis 學習門檻低,簡單易學,程式設計師直接編寫原生態 sql,可嚴格控制 sql 執行性
能,靈活度高,非常適合對關係資料模型要求不高的軟體開發,例如網際網路軟體、企業運
營類軟體等,因為這類軟體需求變化頻繁,一但需求變化要求成果輸出迅速。但是靈活的
前提是 mybatis 無法做到資料庫無關性,如果需要實現支援多種資料庫的軟體則需要自定
義多套 sql 對映檔案,工作量大。
3) Hibernate 物件/關係對映能力強,資料庫無關性好,對於關係模型要求高的軟體(例如
需求固定的定製化軟體)如果用 hibernate 開發可以節省很多程式碼,提高效率。但是
Hibernate 的缺點是學習門檻高,要精通門檻更高,而且怎麼設計 O/R 對映,在效能和物件
模型之間如何權衡,以及怎樣用好 Hibernate 需要具有很強的經驗和能力才行。
總之,按照使用者的需求在有限的資源環境下只要能做出維護性、擴充套件性良好的軟體架構都
是好架構,所以框架只有適合才是最好。

MyBatis 的好處是什麼?

1) MyBatis 把 sql 語句從 Java 源程式中獨立出來,放在單獨的 XML 檔案中編寫,給程式的
維護帶來了很大便利。
2) MyBatis 封裝了底層 JDBC API 的呼叫細節,並能自動將結果集轉換成 Java Bean 物件,
大大簡化了 Java 資料庫程式設計的重複工作。
3)因為 MyBatis 需要程式設計師自己去編寫 sql 語句,程式設計師可以結合資料庫自身的特點靈活
控制 sql 語句,因此能夠實現比 Hibernate 等全自動 orm 框架更高的查詢效率,能夠完成復
雜查詢。
簡述 Mybatis 的 Xml 對映檔案和 Mybatis 內部資料結構之間的對映關係?
:在Mybatis將所有的XML配置資訊都封裝到ALL-IN-One重量級Configuration內部,在XML對映檔案中,

<parameterMap>標籤會被解析為ParameterMapping物件,<resultMap>標籤會被解析為ResultMap物件,

其每個子元素會被解析為ResultMapping物件。每一個select,insert,update,delete,標籤會被解析為MappedStatement物件,

標籤內的sql會被解析為BoundSql物件。

什麼是 MyBatis 的介面繫結,有什麼好處 ?

:介面對映就是在Mybatis中任意定義介面,然後把接口裡面的方法和sql語句繫結,

我們直接呼叫介面方法就可以,這樣比原來的SqlSession提高的方法我們可以有更加靈活的選擇和設定。

介面繫結有幾種實現方式,分別是怎麼實現的?
:介面繫結有兩種實現方式,一種是通過註解繫結,就是子啊介面的方法上面加@select,@update等註解裡面包含Sql

語句來繫結,另外一種就是通過xml裡面寫sql來繫結,在這種情況下,要指定xml檔案裡面的namespace必須為介面的全路徑名字。

什麼情景下使用註解繫結,什麼情況下使用xml繫結?

當 Sql 語句比較簡單時候,用註解繫結;當 SQL 語句比較複雜時候,用 xml 繫結,一般用
xml 繫結的比較多

原文:https://blog.csdn.net/weixin_45930636/article/details/104432718