Mybatis(三) 映射文件詳解


    前面說了全局配置文件中內容的詳解,大家應該清楚了,現在來說說這映射文件,這章就對輸入映射、輸出映射、動態sql這幾個知識點進行說明,其中高級映射(一對一,一對多,多對多映射)在下一章進行說明。

 

一、輸入映射

      輸入映射:配置statement中輸入參數的類型。有四種

      1.1、傳遞簡單類型,八大基本類型,比如int類型

          findUserById:根據id進行查詢對應user,那么傳入的就應該是int類型的值。所以使用別名int來映射傳入的值

            

      1.2、傳遞pojo(代表正常的對象,比如user的javabean對象)    

          insertUser:就是傳遞的User這個對象。

              

          注意:在使用pojo之后,#{xxx}。 xxx表示pojo對象中的屬性名。

      1.3、傳遞包裝pojo(其中放置的為集合,對象引用等)

          什么是包裝pojo?比如

            

         queryUserList

                 

          注意:user.username這個屬性的獲取,因為UserQueryVO是一個包裝pojo,其中有user的引用。而user中又有username的屬性,那么這樣一層層取過來用即可。

      1.4、傳遞hashmap

          這個也很簡單,理解了前面的,這個不難。

            

          注意:hashmap使用的是別名,mybatis中內置了。

 

二、輸出映射

      講解兩個東西。resultType和resultMap

            

      2.1、resultType

         這個沒什么好講解的,也就是查詢出來的結果的列名需要對應我們編寫的輸出映射類型中的屬性名,如果不匹配,則不能完成映射,那么查詢出來的結果也不能如願的放入對應的對象中去。這個很正常,我們都知道。

      2.2、resultMap

         查詢出來的結果的列名不用對應我們編寫的輸出映射類型中的屬性名,也能夠完成映射。此時就需要resultMap來做這個事情了,使用一個案例來說明

         案例1.:查詢的sql語句使用了別名,如何將其與對應的對象的屬性進行映射?使用resultMap來完成     

            

         分析:看懂了嗎?其實就是通過resultMap這個中介,來幫我們完成映射,本來是不能夠成功映射的,因為屬性名和列名不同,但是中間有了resultMap幫我們完成這個映射。就可以達到這種效果了,不過使用resultMap是比resultType更為繁瑣一點,但是也有其優點,在進行高級映射時,更多的是使用resultMap,這里只是先體驗一下resutlMap的基本用法,在下一章講解高級映射時,會深化講解resultMap的用法。

 

三、動態sql

      這是個很有趣的東西,個人感覺挺好的。

      通過Mybatis提供的各種動態標簽實現動態拼接sql,使得mapper映射文件在編寫SQL時更加靈活,方便。常用動態SQL標簽有:if、where、foreach

      3.1、if和where

         if標簽用來判斷

            里面有test屬性,可以輸入判斷語句

         where標簽,處理條件是否輸入正確。如果沒有條件,就把自己干掉

         具體使用代碼來看看

          

 

      3.2、foreach

          

            

         注意:foreach中的open和close這兩個屬性,open:在遍歷之前將創建該字符串,一直遍歷,遍歷結束后,將close中的內容拼接上去。

 

      3.3、sql片段

           通俗點講,就是對動態sql的重用,將寫好的動態sql提取出來,然后在需要的地方進行調用。

           Sql片段要先定義后使用 

           

 

四、總結

        這章節也很簡單,具體又認識了一下映射文件中的一些配置,最主要是接觸到了兩個新的東西,輸出映射的resultMap和動態sql。其中resultMap並沒有講全,只是介紹了一下他的作用及最簡單的用法,具體的會在下一章節講解到。也就是高級映射。

 


免責聲明!

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



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