關聯查詢的resultMap寫法示例

劍握在手發表於2015-01-28
對於自定義物件一般使用association,對於集合一般使用collection。

對於一般的自定義物件

1、使用子查詢:

<resultMap id="BaseResultMapWithItemInfo" type="com.xxx.biz.cases.model.ShCase" extends="BaseResultMap">
      <association property="applyBillDetailList" column="SERVICE_ID" select="com.xxx.biz.dao.ApplybillDetailMapper.getBriefInfoByServiceId" />
      <association property="commentSpList" column="SERVICE_ID" select="com.xxx.biz.dao.ServicePartcommentMapper.getCommentSpBriefInfoByServiceId" />
      <association property="finalUseSpList" column="SERVICE_ID" select="com.xxx.biz.dao.ServicePartcommentMapper.getFinalUseSpBriefInfoByServiceId" />
    </resultMap>

 

2、不使用子查詢:

<resultMap type="org.apache.ibatis.submitted.associationtest.Car" id="carResult">  
        <id column="carid" property="id"/>  
        <result column="cartype" property="type"/>  
        <association property="engine" resultMap="engineResult"/>  
        <association property="brakes" resultMap="brakesResult"/>  
    </resultMap>  
    <resultMap type="org.apache.ibatis.submitted.associationtest.Engine" id="engineResult">  
        <result column="enginetype" property="type"/>  
        <result column="enginecylinders" property="cylinders"/>  
    </resultMap>  
    <resultMap type="org.apache.ibatis.submitted.associationtest.Brakes" id="brakesResult">  
        <result column="brakesType" property="type"/>  
    </resultMap>

或者類似如下寫法:

<resultMap type="org.apache.ibatis.submitted.associationtest.Car" id="carResult">  
        <id column="carid" property="id"/>  
        <result column="cartype" property="type"/>  
        <association property="engine" javaType="org.apache.ibatis.submitted.associationtest.Engine"> 
             <result column="enginetype" property="type"/>  
             <result column="enginecylinders" property="cylinders"/> 
        </association>
    </resultMap>  

 

這樣會自動在sql查詢結果裡找到相應的欄位來組成相應的物件。

 

 

對於list

1、使用子查詢:

<resultMap type="com.xxx.base.sys.domain.User" id="userWithRolesMap" extends="BaseResultMap">
  <collection property="roles" column="id" javaType="list" select="com.xxx.base.sys.dao.RoleMapper.selectUserRoleByUserId">      </collection>
</resultMap>

 

2、當然,也可以不使用子查詢

<collection property="tags" javaType="list" ofType="Tag" >  
     <id property="id" column="tag_id"/>  
</collection>

這會讓mybatis自動進行一個類似group by的操作,將所有其他欄位重複的資料合併,然後將tag_id作為Tag的id屬性拼成一個List<Tag>,這樣做效率高一些,但是使用場景也是有限的。

 

3、如果list中的物件是String

<collection property="tags" javaType="list" ofType="String" >  
     <result column="tag_id"/>  
</collection>

 

注意,以上2和3中collection標籤和1一樣,都應該包裹在resultMap標籤中,這裡為了省事省略了

相關文章