轉載:ResultMap和ResultType在使用中的區別
resultType:當使用resultType做SQL語句返回結果型別處理時,對於SQL語句查詢出的欄位在相應的pojo中必須有和它相同的欄位對應,而resultType中的內容就是pojo在本專案中的位置。
因此對於單表查詢的話用resultType是最合適的。但是,如果在寫pojo時,不想用資料庫表中定義的欄位名稱,也是可以使用resultMap進行處理對應的。多表連線查詢時,若是一對一的連線查詢,那麼需要新建一個pojo,pojo中包括兩個表中需要查詢出的所有的欄位,這個地方的處理方式通常為建立一個繼承一個表字段的pojo,再在裡面新增另外一個表內需要查詢出的欄位即可。若是一對多查詢時,若是使用內連線查詢,則很可能出現查詢出的欄位有重複。使用雙重for迴圈巢狀處理即可。
resultMap:當使用resultMap做SQL語句返回結果型別處理時,通常需要在mapper.xml中定義resultMap進行pojo和相應表字段的對應。
<!-- 訂單查詢關聯使用者的resultMap 將整個查詢的結果對映到cn.itcast.mybatis.po.Orders中 --> <resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap"> <!-- 配置對映的訂單資訊 --> <!-- id:指定查詢列中的唯 一標識,訂單資訊的中的唯 一標識,如果有多個列組成唯一標識,配置多個id column:訂單資訊的唯 一標識 列 property:訂單資訊的唯 一標識 列所對映到Orders中哪個屬性 --> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <result column="createtime" property="createtime"/> <result column="note" property="note"/> </resultMap>
resultMap對於一對一表連線的處理方式通常為在主表的pojo中新增巢狀另一個表的pojo,然後在mapper.xml中採用association節點元素進行對另一個表的連線處理。例如:
<!-- 訂單查詢關聯使用者的resultMap 將整個查詢的結果對映到cn.itcast.mybatis.po.Orders中 --> <resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap"> <!-- 配置對映的訂單資訊 --> <!-- id:指定查詢列中的唯 一標識,訂單資訊的中的唯 一標識,如果有多個列組成唯一標識,配置多個id column:訂單資訊的唯 一標識 列 property:訂單資訊的唯 一標識 列所對映到Orders中哪個屬性 --> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <result column="createtime" property="createtime"/> <result column="note" property="note"/> </resultMap>
若是一對多的表連線方式,比如訂單表和訂單明細表即為一對多連線,若是不對sql語句進行處理,由於一個訂單對應多條訂單明細,因此查詢出的結果對於訂單表資料來說將會出現重複,例如:
resultMap的處理方式為在訂單表資料的pojo中新增一個list,list中為訂單明細表的屬性,在mapper.xml中採用如下的處理方式:
<!-- 訂單查詢關聯使用者的resultMap
將整個查詢的結果對映到cn.itcast.mybatis.po.Orders中
-->
<resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap">
<!-- 配置對映的訂單資訊 -->
<!-- id:指定查詢列中的唯 一標識,訂單資訊的中的唯 一標識,如果有多個列組成唯一標識,配置多個id
column:訂單資訊的唯 一標識 列
property:訂單資訊的唯 一標識 列所對映到Orders中哪個屬性
-->
<id column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/>
</resultMap>
在查詢時,雖然一條訂單資訊對應多條訂單明細,由於將多條資訊明細儲存到了list中,因此查詢後將不再出現重複資料,達到了去重的效果
尊重原創,原文地址:http://blog.csdn.net/fengbird/article/details/50947150