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並沒有講全,只是介紹了一下他的作用及最簡單的用法,具體的會在下一章節講解到。也就是高階對映。