在項目中我們很多時候會遇到需要用到多表連接查詢的時候,通常這種時候我們的mybatis的
<select>
中並沒有一個合適的resultType去接收查詢得到的結果,這個時候就需要用到
<resultMap>
示例:
JavaBean(此處省略getter/setter方法)
public class ActivityUserTask {
private Long id;
private Long activityId;
private Long taskId;
private Long matchId;
private Long bUserId;
private Long gUserId;
private Date createTime;
private String bUserName;
private String gUserName;
private Integer type;
private List<ActivityUserTaskPhoto> photos;
}
public class ActivityUserTaskPhoto {
private Long taskId;
private String picId;
private Integer status;
}
XML
<sql id="select_column_sql">
select
a.id as id,
a.task_id as taskId,
a.activity_id as activityId,
a.match_id as matchId,
a.b_user_id as bUserId,
a.g_user_id as gUserId,
a.create_time as createTime,
a.update_time as updateTime,
b1.name as bUserName,
b2.name as gUserName,
c.type as type,
d.pic_id as picId
from m_activity_user_task a
left join m_user_info b1 on a.b_user_id = b1.id
left join m_user_info b2 on a.g_user_id = b2.id
left join m_activity_user_match c on a.match_id = c.id
left join m_activity_user_task_photo d on a.id = d.task_id
</sql>
<resultMap id="userTask" type="ActivityUserTask">
<id property="id" column="id"/>
<result property="taskId" column="taskId"/>
<result property="bUserId" column="bUserId"/>
<result property="gUserId" column="gUserId"/>
<result property="createTime" column="createTime"/>
<result property="bUserName" column="bUserName"/>
<result property="gUserName" column="gUserName"/>
<result property="type" column="type"/>
<collection property="photos" ofType="ActivityUserTaskPhoto">
<result property="picId" column="picId"/>
</collection>
</resultMap>
<select id="findList" parameterType="ActivityUserTask"
resultMap="userTask">
<include refid="select_column_sql" />
order by id desc
</select>
這裏有幾點需要注意:
1.由於沒有一個合適的resultType所以我只有自己定義一個resultMap去接收select到的結果。
2.由於JAVA類中的屬性名和數據庫中的字段名不一樣需要用到別名去與數據庫中的表進行映射
3.由於用到了別名所以resultMap中的<result property="taskId" column="taskId"/>
中column也必須等於別名。
4.<collection property="photos" ofType="ActivityUserTaskPhoto">
用於一對多映射,property屬性名,ofType爲屬性所屬類。
其中還有id表示主鍵,result表示非主鍵字段。
5.<association>
用於一對一映射。