1. 程式人生 > 其它 >Mybatis結果對映

Mybatis結果對映

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 自動對映 自動對映 自動對映