| 維度 | resultType | resultMap |
|---|---|---|
| 定義方式 | 直接指定類別名/別名 | 預先定義 <resultMap> 後引用 ID |
| 映射控制 | 完全自動(列名≈屬性名) | 完全手動(逐欄位映射) |
| 列名不匹配 | 需 SQL 別名或開啟駝峰轉換 | 直接 column="db_col" property="javaProp" |
| 關聯查詢 | 不支援 | 支援 <association>/<collection> |
| 主鍵標識 | 無 | <id> 標識,影響去重與緩存 |
-- 表結構
id, cate_id, name, price, description, order_no, update_time
<select id="selectById" resultType="goods">
SELECT
id,
cate_id AS cateId,
name,
price,
description,
order_no AS orderNo,
update_time AS updateTime
FROM goods WHERE id = #{id}
</select>
或開啟全局 mapUnderscoreToCamelCase=true,SQL 可直寫列名。
<resultMap id="goodsMap" type="Goods">
<id property="id" column="id"/>
<result property="cateId" column="cate_id"/>
<result property="name" column="name"/>
<result property="price" column="price"/>
<result property="description" column="description"/>
<result property="orderNo" column="order_no"/>
<result property="updateTime" column="update_time"/>
</resultMap>
<select id="selectAll" resultMap="goodsMap">
SELECT id, cate_id, name, price, description, order_no, update_time FROM goods
</select>
// resultType 結果(未開啟駝峰、無別名時)
[goods include:Id=4,name=clark,orderNo=null,cateId=null,updateTime=null]
// resultMap 結果
[goods include:Id=4,name=clark,orderNo=5,cateId=12,updateTime=2024-01-15]
resultType 依賴「列名精確匹配屬性名」,缺一不可;resultMap 逐欄位聲明,零遺漏。
<association>、一對多 <collection><id> 標識正確列<id> 唯一標識<constructor> 映射resultType 是「約定優於配置」的便捷門面,resultMap 是「配置優於約定」的精準手術刀。理解自動映射的匹配規則與顯式映射的控制力,能根據場景做最優選擇。