級聯是在resultMap標簽中配置。級聯不是必須的,級聯的好處是獲取關聯數據十分便捷,但是級聯過多會增加系統的復雜度,同事降低系統的性能,次增彼減,所以記錄超過3層時,就不要考慮使用級聯了,因為這樣會造成多個對象的關聯,導致系統的耦合、負載和難以維護。
MyBatis中的級聯分2種:
1.一對一(association)
2.一對多(collection)
一、一對一
A表一對一B表情況下A對象當中有外鍵關聯的B表的對象作為屬性,A對象中有一個B對象屬性。當查A對象時,如果想把B對象屬性同時獲取,有三種方式。
三種方式:
1、多表聯合查詢,即A表和B表聯合查詢,同事查出A、B表的字段,然后配置resultMap標簽。
resultMap標簽的配置如下:
1 <resultMap id="AResultMap" type="com.A" > 2 <id column="A_ID" property="AId" jdbcType="INTEGER" /> 3 <result column="ASSET_NO" property="assetNo" jdbcType="VARCHAR" /> 4 <result column="AREA_CODE" property="areaCode" jdbcType="VARCHAR" /> 5 <result column="A_ADDR" property=AAddr" jdbcType="VARCHAR" /> 6 <!-- 一下是對A對象中B的屬性的映射配置 --> 7 <result column="B_id" property="b.BId"/> 8 <result column="ONLINE_DATE" property="b.onlineDate"/> 9 <result column="LAST_COMM_TIME" property="b.lastCommTime"/> 10 <result column="STATUS_CODE" property="b.statusCode"/> 11 </resultMap>
2、多表聯合查詢,即A表和B表聯合查詢,同事查出A、B表的字段,然后通過association標簽配置resultMap標簽。
resultMap標簽的配置如下:
<resultMap id="AResultMap" type="com.A" > <id column="A_ID" property="AId" jdbcType="INTEGER" /> <result column="ASSET_NO" property="assetNo" jdbcType="VARCHAR" /> <result column="AREA_CODE" property="areaCode" jdbcType="VARCHAR" /> <result column="A_ADDR" property=AAddr" jdbcType="VARCHAR" /> <!-- 一下是對A對象中B的屬性的映射配置 --> <association property="b" javaType="com.B"> <id column="B_id" property="bId"/> <result column="ONLINE_DATE" property="onlineDate"/> <result column="LAST_COMM_TIME" property="lastCommTime"/> <result column="STATUS_CODE" property="statusCode"/> </association> </resultMap>
3、只查詢A表字段,然后通過外鍵調用查詢B表的select標簽查詢B表對象,通過association標簽配置resultMap標簽。
resultMap標簽的配置如下:
1 <resultMap id="AResultMap" type="com.A" > 2 <id column="A_ID" property="AId" jdbcType="INTEGER" /> 3 <result column="ASSET_NO" property="assetNo" jdbcType="VARCHAR" /> 4 <result column="AREA_CODE" property="areaCode" jdbcType="VARCHAR" /> 5 <result column="A_ADDR" property=AAddr" jdbcType="VARCHAR" /> 6 <!-- 一下是對A對象中B的屬性的映射配置 --> 7 <association property="b" column="B_ID" select="com.BMapper.selectBById"/> 8 </resultMap>
第三種方式只需要單表查詢,但需要分別查詢A表和B表,通過外鍵調用B表的select。association標簽中調用的B表的select不通過BMapper的接口,因此在BMapper文件對應的接口中可以不寫selectBById方法。
二、一對多
B一對多A只需在resultMap標簽中配置association標簽即可。
<resultMap type="B" id="getB"> <result property="Bid" column="Bid" /> <collection property="AList" column="Bid" javaType="list" select="getAListByBid"/> </resultMap>
