resultType:
作用:
將查詢結果按照sql列名pojo屬性名一致性映射到pojo中
場合:
常見一些明細記錄的展示,比如用戶購買商品明細,將關聯查詢信息全部展示再頁面時,此時可直接使用resultType將每一條記錄映射到pojo中,在前端頁面遍歷list(list中的是pojo)即可
resultMap:
使用association和collection完成一對一和一對多的高級映射(對查詢結果有特殊的映射要求)
- association:
作用:
將關聯查詢信息映射到一個pojo對象中
場合:
爲了方便查詢關聯信息可以使用association將關聯信息映射爲用戶對象中的pojo屬性中,比如:查詢訂單及關聯用戶信息
使用resultType無法將查詢結果映射到pojo對象的pojo屬性中,根據對結果集查詢遍歷的需要使用resultType還是resultMap
- collection:
作用:
將關聯查詢信息映射到一個list集合中
場合:
爲了方便查詢遍歷關聯信息可以使用collection將關聯信息映射到list集合中,比如:查詢用戶權限範圍模塊及模塊下的菜單,可使用collection將模塊映射到模塊list中,將菜單列表應映射到模塊對象的菜單list屬性中,這樣做的目的也是方便對查詢結果集進行遍歷查詢
如果使用resultType無法將查詢結果映射到list集合中
延遲加載
1、什麼是延遲加載
resultMap可以實現高級映射(使用association、collection實現一對一及一對多映射),association、collection具備延遲加載功能
需求:
如果查詢訂單並且關聯查詢用戶信息,如果先查詢訂單信息即可滿足要求,當我們需要查詢用戶信息時再查詢用戶信息,把對用戶信息的按需去查詢就是延遲加載
延遲加載:
先從單表中查詢,需要時再從關聯表去關聯查詢,大大提高數據庫性能,因爲查詢單表要比關聯查詢多張錶速度快
2、使用association實現延遲加載
參數說明:
select:指定延遲加載需要執行的statement的id(是根據user_id查詢用戶信息的statement)
要使用userMapper.xml中findUserById完成根據用戶id,用戶信息的查詢,如果findUserbyId不在本mapper中需要前邊加namespace
column:訂單信息中關聯用戶信息查詢的列,是user_id
<association property="user" javaType="User全路徑" select="" column="">
</association>