Mybatis結果對映
阿新 • • 發佈:2021-08-29
Mybatis的結果對映
使用resultMap
Mybatis框架使用resultMap元素來自定義結果對映。
使用場景如下:
1. 資料庫欄位資訊和物件屬性不一致
①,若不一致的欄位較少,可以在SQL語句中使用別名處理
SELECT 欄位1,
資料庫的欄位2 as 實體類的屬性
FROM 表名
②,若不一致的欄位較多,可以使用resultMap
在UserMapper.xml
中定義如下:
<resultMap type="類的全限定名或別名" id="起名(唯一)"> <id property="實體類中的屬性" column="表中的列名"/> <!--id:主鍵--> <result property="實體類中的屬性" column="表中的列名"/> <!--result:普通屬性--> </resultMap> <select id="getAllUser" resultMap="resultMap的id名" > //這裡是查詢語句 </select>
2. 複雜的聯合查詢,可以自由控制結果(這個在後面的級聯關係中說)
resultMap的自動對映行為
設定自動對映:
<settings>
<setting name="autoMappingBehavior" value="PARTIAL/NONE/FULL"/>
</settings>
resultMap的自動對映的三種行為:
- NONE:禁用自動對映,僅為手動對映的屬性賦值。
- PARTIAL:預設行為,對於沒有巢狀對映的resultMap使用自動對映;而對於有巢狀對映的resultMap不使用自動對映,僅為手動對映的屬性賦值。
- FULL:全部使用自動對映,即使有巢狀對映的resultMap也會使用自動對映。
注意:以上是針對使用 resultMap 的情況而言,如果使用 resultType 則有些不同。例如,resultType不支援巢狀對映,無論autoMappingBehavior
設定為PARTIAL
還是FULL
,實體類都會使用自動對映,而實體類中的關聯屬性都不會被初始化,始終為null
。並且,由於resultType
完全依賴自動對映,如果autoMappingBehavior
設定為NONE
,resultType 會失效,無法初始化實體類物件而返回 null ,此時返回查詢結果只能使用 resultMap 手動對映。自動對映行為對 resultMap 和 resultType 的影響如下表所示:
自動對映行為 | resultType(不支援巢狀對映) | 沒有巢狀對映的resultMap | 有巢狀對映的resultMap |
---|---|---|---|
NONE | 失效 | 手動對映 | 手動對映 |
PARTIAL | 自動對映 | 自動對映 | 手動對映 |
FULL | 自動對映 | 自動對映 | 自動對映 |