對於自定義物件一般使用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標籤中,這裡為了省事省略了