mybatis知識點

weixin_34391854發表於2016-11-02

1.Mybatis比IBatis比較大的幾個改進是什麼 a.有介面繫結,包括註解繫結sql和xml繫結Sql , b.動態sql由原來的節點配置變成OGNL表示式, c. 在一對一,一對多的時候引進了association,在一對多的時候引入了collection 節點,不過都是在resultMap裡面配置

2.2.什麼是MyBatis的介面繫結,有什麼好處 介面對映就是在IBatis中任意定義介面,然後把介面裡面的方法和SQL語句繫結, 我們直接呼叫介面方法就可以,這樣比起原來了SqlSession提供的方法我們可以有更加靈活的選擇和設定. 3.介面繫結有幾種實現方式,分別是怎麼實現的? 介面繫結有兩種實現方式,一種是通過註解繫結,就是在介面的方法上面加上 @Select@Update等註解裡面包含Sql語句來繫結,另外一種就是通過xml裡面寫SQL來繫結, 在這種情況下,要指定xml對映檔案裡面的namespace必須為介面的全路徑名.

4.什麼情況下用註解繫結,什麼情況下用xml繫結 當Sql語句比較簡單時候,用註解繫結, 當SQL語句比較複雜時候,用xml繫結,一般用xml繫結的比較多

5.5.MyBatis實現一對一有幾種方式?具體怎麼操作的 有聯合查詢和巢狀查詢,聯合查詢是幾個表聯合查詢,只查詢一次, 通過在resultMap裡面配置association節點配置一對一的類就可以完成; 巢狀查詢是先查一個表,根據這個表裡面 的結果的外來鍵id,去再另外一個表裡面查詢資料,也是通過association配置,但另外一個表 的查詢通過select屬性配置

6.6.MyBatis實現一對多有幾種方式,怎麼操作的 有聯合查詢和巢狀查詢,聯合查詢是幾個表聯合查詢,只查詢一次,通過在resultMap裡面配 置collection節點配置一對多的類就可以完成; 巢狀查詢是先查一個表,根據這個表裡面的 結果的外來鍵id,去再另外一個表裡面查詢資料,也是通過配置collection,但另外一個表的 查詢通過select節點配置 7.MyBatis裡面的動態Sql是怎麼設定的?用什麼語法? MyBatis裡面的動態Sql一般是通過if節點來實現,通過OGNL語法來實現,但是如果要寫的完 整,必須配合where,trim節點,where節點是判斷包含節點有內容就插入where,否則不插 入,trim節點是用來判斷如果動態語句是以and 或or開始,那麼會自動把這個and或者or取 掉 8.IBatis和MyBatis在核心處理類分別叫什麼 IBatis裡面的核心處理類交SqlMapClient, MyBatis裡面的核心處理類叫做SqlSession

 

7.10.講下MyBatis的快取 MyBatis的快取分為一級快取和二級快取, 一級快取放在session裡面,預設就有,二級快取放在它的名稱空間裡,預設是開啟的, 使用二級快取屬性類需要實現Serializable序列化接 口(可用來儲存物件的狀態),可在它的對映檔案中配置<cache/> 11.MyBatis(IBatis)的好處是什麼 ibatis把sql語句從Java源程式中獨立出來, 放在單獨的XML檔案中編寫,給程式的維護帶來了很大便利。 ibatis封裝了底層JDBC API的呼叫細節,並能自動將結果集轉換成Java Bean物件, 大大簡化了Java資料庫程式設計的重複工作。 因為Ibatis需要程式設計師自己去編寫sql語句, 程式設計師可以結合資料庫自身的特點靈活控制sql語句, 因此能夠實現比hibernate等全自動orm框架更高的查詢效率,能夠完成複雜查詢。.

 

 

通過上篇介紹mybatis與hibernate區別,我們已經能得出一些mybatis的優缺點,但那只是相對於hibernate的,並不全面,我來繼續總結mybatis的優缺點,以便大家對於mybatis的瞭解能更全面些。但我所說的優缺點,僅是我個人總結並結合使用體驗後得出的結果,並不能代表大眾想法,因此才以“淺談”作為文章標題。如果大家的見解與我不同,歡迎積極提出來一塊討論,我也藉以彌補自己認識的不足和短見。

優點:

1. 易於上手和掌握。

2. sql寫在xml裡,便於統一管理和優化。

3. 解除sql與程式程式碼的耦合。

4. 提供對映標籤,支援物件與資料庫的orm欄位關係對映

5. 提供物件關係對映標籤,支援物件關係組建維護

6. 提供xml標籤,支援編寫動態sql。

缺點:

1. sql工作量很大,尤其是欄位多、關聯表多時,更是如此。

2. sql依賴於資料庫,導致資料庫移植性差。

3. 由於xml裡標籤id必須唯一,導致DAO中方法不支援方法過載。

4. 欄位對映標籤和物件關係對映標籤僅僅是對對映關係的描述,具體實現仍然依賴於sql。(比如配置了一對多Collection標籤,如果sql裡沒有join子表或查詢子表的話,查詢後返回的物件是不具備物件關係的,即Collection的物件為null)

5. DAO層過於簡單,物件組裝的工作量較大。

6.  不支援級聯更新、級聯刪除。

7. 編寫動態sql時,不方便除錯,尤其邏輯複雜時。

8 提供的寫動態sql的xml標籤功能簡單(連struts都比不上),編寫動態sql仍然受限,且可讀性低。

9. 若不查詢主鍵欄位,容易造成查詢出的物件有“覆蓋”現象。

10. 引數的資料型別支援不完善。(如引數為Date型別時,容易報沒有get、set方法,需在引數上加@param)

11. 多引數時,使用不方便,功能不夠強大。(目前支援的方法有map、物件、註解@param以及預設採用012索引位的方式)

12. 快取使用不當,容易產生髒資料。

 

總結:

mybatis的優點其實也是mybatis的缺點,正因為mybatis使用簡單,資料的可靠性、完整性的瓶頸便更多依賴於程式設計師對sql的使用水平上了。sql寫在xml裡,雖然方便了修改、優化和統一瀏覽,但可讀性很低,除錯也非常困難,也非常受限,無法像jdbc那樣在程式碼里根據邏輯實現複雜動態sql拼接。mybatis簡單看就是提供了欄位對映和物件關係對映的jdbc,省去了資料賦值到物件的步驟而已,除此以外並無太多作為,不要把它想象成hibernate那樣強大,簡單小巧易用上手,方便瀏覽修改sql就是它最大的優點了。

mybatis適用於小型且程式設計師能力較低的專案和人群使用,對於中大型專案來說我並不推薦使用,如果覺得hibernate效率低的話(實際上也是使用不當所致,hibernate是實際上是不適用於擁有高負載的工程專案),還不如直接用spring提供的jdbc簡單框架(Template),同樣支援物件對映。