Mybatis的mapper.xml文件詳解
1、#{}和${}的區別:
#{}表示一個占位符號,#{}接收輸入參數,類型可以是簡單類型,pojo、hashmap。
如果接收簡單類型,#{}中可以寫成value或其它名稱。
#{}接收pojo對象值,通過OGNL讀取對象中的屬性值,通過屬性.屬性.屬性...的方式獲取對象屬性值。
${}表示一個拼接符號,會引用sql註入,所以不建議使用${}。
${}接收輸入參數,類型可以是簡單類型,pojo、hashmap。
如果接收簡單類型,${}中只能寫成value。
${}接收pojo對象值,通過OGNL讀取對象中的屬性值,通過屬性.屬性.屬性...的方式獲取對象屬性值。
2、selectOne和selectList的區別:
selectOne表示查詢出一條記錄進行映射。如果使用selectOne可以實現使用selectList也可以實現(list中只有一個對象)。
selectList表示查詢出一個列表(多條記錄)進行映射。如果使用selectList查詢多條記錄,不能使用selectOne。
如果使用selectOne報錯:
org.apache.ibatis.exceptions.TooManyResultsException:
Expected one result (or null) to be returned by selectOne(), but found: 4
3、在映射文件中通過parameterType指定輸入參數的類型。
4、在映射文件中通過resultType指定輸出結果的類型。
5、resultType:
使用resultType實現較為簡單,如果pojo中沒有包括查詢出來的列名,
需要增加列名對應的屬性,即可完成映射。
如果沒有查詢結果的特殊要求建議使用resultType。
6、resultMap:
需要單獨定義resultMap,實現有點麻煩,如果對查詢結果有特殊的要求,
使用resultMap可以完成將關聯查詢映射pojo的屬性中。
resultMap可以實現延遲加載,resultType無法實現延遲加載。
6.1、resultMap:
使用association和collection完成一對一和一對多高級映射(對結果有特殊的映射要求)。
association:
作用:將關聯查詢信息映射到一個pojo對象中。
場合:為了方便查詢關聯信息可以使用association將關聯訂單信息映射為用戶對象的pojo屬性中,
比如:查詢訂單及關聯用戶信息。
使用resultType無法將查詢結果映射到pojo對象的pojo屬性中,根據對結果集查詢遍歷的需要選擇使用resultType還是resultMap
collection:
作用:將關聯查詢信息映射到一個list集合中。
場合:為了方便查詢遍歷關聯信息可以使用collection將關聯信息映射到list集合中,
比如:查詢用戶權限範圍模塊及模塊下的菜單,
可使用collection將模塊映射到模塊list中,將菜單列表映射到模塊對象的菜單list屬性中,
這樣的作的目的也是方便對查詢結果集進行遍歷查詢。如果使用resultType無法將查詢結果映射到list集合中。
7、友情鏈接
Mybatis入門例子
mybatis官網
Mybatis的mapper.xml文件詳解