在MyBatis中,如果你使用resultType而不是resultMap,並且結果集中有同名欄位,則預設情況下後出現的欄位值會覆蓋前面的欄位值。這是因為MyBatis在將結果集映射到Java對象時,是按照欄位名稱一一對應進行賦值的。 但若你希望更精確地控制映射關係,並且避免自動覆蓋行為,則可以用r ...
在MyBatis中,如果你使用resultType而不是resultMap,並且結果集中有同名欄位,則預設情況下後出現的欄位值會覆蓋前面的欄位值。這是因為MyBatis在將結果集映射到Java對象時,是按照欄位名稱一一對應進行賦值的。
但若你希望更精確地控制映射關係,並且避免自動覆蓋行為,則可以用resultMap來顯式指定每個欄位應該映射到哪個屬性上,它在遇到同名欄位時不會進行覆蓋,尤其是當涉及到多表查詢時。
例如,如果有兩個表中的欄位名相同,你可以分別為它們起不同的別名:
<select id="selectExample" resultMap="combinedResult">
SELECT
t1.id as t1_id,
t2.id as t2_id,
...
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.t1_id
</select>
<resultMap id="combinedResult" type="YourJavaType">
<id property="idFromTable1" column="t1_id"/>
<!-- 其他來自table1的欄位 -->
<id property="idFromTable2" column="t2_id"/>
<!-- 其他來自table2的欄位 -->
</resultMap>
這樣通過column屬性指定了資料庫中的欄位別名與Java實體類中屬性的對應關係,即使欄位名相同,也能確保正確映射到不同屬性上而不會被覆蓋。