mybatis的級聯查詢


  級聯是在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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM