首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

MyBatis resultType 與 resultMap 差異實戰對比

     編輯:Java 相關知識

核心差異速覽

維度resultTyperesultMap
定義方式直接指定類別名/別名預先定義 <resultMap> 後引用 ID
映射控制完全自動(列名≈屬性名)完全手動(逐欄位映射)
列名不匹配需 SQL 別名或開啟駝峰轉換直接 column="db_col" property="javaProp"
關聯查詢不支援支援 <association>/<collection>
主鍵標識無<id> 標識,影響去重與緩存

實戰對比:同一查詢,兩種寫法

場景:Goods 表欄位含下劃線,Java 屬性駝峰

-- 表結構
id, cate_id, name, price, description, order_no, update_time

寫法一:resultType + 別名/駝峰開關

<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 顯式映射

<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 逐欄位聲明,零遺漏。

何時必須用 resultMap

  1. 多表關聯:一對一 <association>、一對多 <collection>
  2. 主鍵非 id / 聯合主鍵:需 <id> 標識正確列
  3. 列名與屬性名差異大:手寫映射比 SQL 別名更清晰
  4. 二級緩存/嵌套結果去重:依賴 <id> 唯一標識
  5. 構造器注入/Builder 模式:<constructor> 映射

最佳實踐建議

  • 簡單單表、列名規範 → resultType(開啟駝峰轉換)
  • 複雜映射、關聯查詢、緩存場景 → resultMap
  • 團隊規範:統一用 resultMap 避免隱性 Bug,IDE 可自動生成骨架

總結

resultType 是「約定優於配置」的便捷門面,resultMap 是「配置優於約定」的精準手術刀。理解自動映射的匹配規則與顯式映射的控制力,能根據場景做最優選擇。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved