在 MyBatis 查詢中,想要將結果映射為 Object 類型:
<select id="getExpInfoByRow" resultType="?">
-- 查詢語句
</select>
Service 層接收方式為:
List<Object[]> obj;
嘗試寫 resultType="Object" 卻報錯,該如何正確配置?
| 特性 | resultType | resultMap |
|---|---|---|
| 適用場景 | 查詢結果欄位與實體類屬性一一對應 | 複雜映射、多對一、一對多、欄位名不一致 |
| 配置複雜度 | 簡單,僅需指定類全路徑 | 需定義詳細映射關係 |
| 靈活度 | 低 | 高 |
當查詢欄位不固定或不想建立實體類時,推薦使用 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 會自動根據欄位名與屬性名匹配封裝。
java.lang.Object 無具體屬性,MyBatis 無法進行屬性映射若欄位動態變化,可使用 ResultHandler 或查詢為 Map<String, Object>:
<select id="getDynamicData" resultType="java.util.HashMap">
SELECT * FROM table_name
</select>
resultType,最乾淨resultMap 映射 Object[]resultType="Map" 或 ResultHandlerObject 作為 resultType