Mybatis的mapper.xml文件詳解

一、#{}和${}的區別:html

        #{}表示一個佔位符號,#{}接收輸入參數,類型能夠是簡單類型,pojo、hashmap。
        若是接收簡單類型,#{}中能夠寫成value或其它名稱。
        #{}接收pojo對象值,經過OGNL讀取對象中的屬性值,經過屬性.屬性.屬性...的方式獲取對象屬性值。

        ${}表示一個拼接符號,會引用sql注入,因此不建議使用${}。
        ${}接收輸入參數,類型能夠是簡單類型,pojo、hashmap。
        若是接收簡單類型,${}中只能寫成value。
        ${}接收pojo對象值,經過OGNL讀取對象中的屬性值,經過屬性.屬性.屬性...的方式獲取對象屬性值。

java

二、selectOne和selectList的區別:
        selectOne表示查詢出一條記錄進行映射。若是使用selectOne能夠實現使用selectList也能夠實現(list中只有一個對象)。web

        selectList表示查詢出一個列表(多條記錄)進行映射。若是使用selectList查詢多條記錄,不能使用selectOne。
        若是使用selectOne報錯:
        org.apache.ibatis.exceptions.TooManyResultsException:
        Expected one result (or null) to be returned by selectOne(), but found: 4

sql

三、在映射文件中經過parameterType指定輸入參數的類型。

四、在映射文件中經過resultType指定輸出結果的類型。apache

 

五、resultType:mybatis

使用resultType實現較爲簡單,若是pojo中沒有包括查詢出來的列名,spa

須要增長列名對應的屬性,便可完成映射。.net

若是沒有查詢結果的特殊要求建議使用resultType。htm

 

六、resultMap:對象

須要單獨定義resultMap,實現有點麻煩,若是對查詢結果有特殊的要求,

使用resultMap能夠完成將關聯查詢映射pojo的屬性中。

resultMap能夠實現延遲加載,resultType沒法實現延遲加載。

 

6.一、resultMap:

使用association和collection完成一對一和一對多高級映射(對結果有特殊的映射要求)。

association:

做用:將關聯查詢信息映射到一個pojo對象中。

場合:爲了方便查詢關聯信息可使用association將關聯訂單信息映射爲用戶對象的pojo屬性中,

好比:查詢訂單及關聯用戶信息。

使用resultType沒法將查詢結果映射到pojo對象的pojo屬性中,根據對結果集查詢遍歷的須要選擇使用resultType仍是resultMap

 

collection:

做用:將關聯查詢信息映射到一個list集合中。

場合:爲了方便查詢遍歷關聯信息可使用collection將關聯信息映射到list集合中,

好比:查詢用戶權限範圍模塊及模塊下的菜單,

可以使用collection將模塊映射到模塊list中,將菜單列表映射到模塊對象的菜單list屬性中,

這樣的做的目的也是方便對查詢結果集進行遍歷查詢。若是使用resultType沒法將查詢結果映射到list集合中。

 


七、友情連接

     Mybatis入門例子

     mybatis官網

相關文章
相關標籤/搜索