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

MyBatis 的好處是什么?
1MyBatis sql 語句從 Java 源程序中獨立出來,放在單獨的 XML 文件中編寫,給程序的
維護帶來了很大便利。
2MyBatis 封裝了底層 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 綁定的比較多

下一篇持續更新Mybatis系列常見面試問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM