首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MyBatis resultType 返回 Object 類型的正確姿勢

     編輯:程式設計綜合問答

問題場景

在 MyBatis 查詢中,想要將結果映射為 Object 類型:

<select id="getExpInfoByRow" resultType="?">
    -- 查詢語句
</select>

Service 層接收方式為:

List<Object[]> obj;

嘗試寫 resultType="Object" 卻報錯,該如何正確配置?

核心概念:resultType vs resultMap

特性resultTyperesultMap
適用場景查詢結果欄位與實體類屬性一一對應複雜映射、多對一、一對多、欄位名不一致
配置複雜度簡單,僅需指定類全路徑需定義詳細映射關係
靈活度低高

解決方案一:使用 resultMap 映射 Object[]

當查詢欄位不固定或不想建立實體類時,推薦使用 resultMap 配合 <result> 標籤:

<resultMap id="objArrayMap" type="java.lang.Object[]">
    <result property="[0]" column="col1"/>
    <result property="[1]" column="col2"/>
    <result property="[2]" column="col3"/>
    -- 依查詢欄位數量配置
</resultMap>

<select id="getExpInfoByRow" resultMap="objArrayMap">
    SELECT col1, col2, col3 FROM table_name
</select>

解決方案二:定義實體類(推薦)

若查詢結構固定,建立對應實體類最為清晰:

public class ExpInfo {
    private String col1;
    private Integer col2;
    private Date col3;
    // getter/setter
}
<select id="getExpInfoByRow" resultType="com.example.ExpInfo">
    SELECT col1, col2, col3 FROM table_name
</select>

MyBatis 會自動根據欄位名與屬性名匹配封裝。

為什麼 resultType="Object" 會報錯?

  • java.lang.Object 無具體屬性,MyBatis 無法進行屬性映射
  • MyBatis 需要具體類型以便反射設值

進階技巧:動態結果映射

若欄位動態變化,可使用 ResultHandler 或查詢為 Map<String, Object>:

<select id="getDynamicData" resultType="java.util.HashMap">
    SELECT * FROM table_name
</select>

總結建議

  1. 固定結構:建立實體類 + resultType,最乾淨
  2. 簡單多欄位:resultMap 映射 Object[]
  3. 動態欄位:resultType="Map" 或 ResultHandler
  4. 避免直接使用 Object 作為 resultType
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved