1:前言
我们经常会碰到1:N映射关系,会有这样一个业务需求,比如,一个话题下有很多的评价,我们需要获得这个话题和所有的评价,又比如一个评价下有很多指标,我们需要获得这个评价和所有指标,那么如何通过一次查询返回一个对象,这个对象包括了评价的基本属性和所有指标的列表?
2:需求
通过查询获得用户评价的信息和评价指标分数列表
已知以下表
用户评价表
评价指标表
指标表
要获得以下Dto
/**
* Created by Mr.Cheng on 2017/3/18.
*/
public class UserEvaluate {
private Integer id; //ID
private Integer userId; //用户id
private String userName; //用户名称
private Integer evaluateId;//评价id
private List<TagScore> tagScore;// 评价列表
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Integer getEvaluateId() {
return evaluateId;
}
public void setEvaluateId(Integer evaluateId) {
this.evaluateId = evaluateId;
}
public List<TagScore> getTagScore() {
return tagScore;
}
public void setTagScore(List<TagScore> tagScore) {
this.tagScore = tagScore;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
/**
* Created by Mr.Cheng on 2017/3/18.
*/
public class UserEvaluate {
private Integer id; //ID
private Integer userId; //用户id
private String userName; //用户名称
private Integer evaluateId;//评价id
private List<TagScore> tagScore;// 评价列表
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Integer getEvaluateId() {
return evaluateId;
}
public void setEvaluateId(Integer evaluateId) {
this.evaluateId = evaluateId;
}
public List<TagScore> getTagScore() {
return tagScore;
}
public void setTagScore(List<TagScore> tagScore) {
this.tagScore = tagScore;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
3:MyBaits实现
<resultMap type="UserEvaluate" id="userEvaluateMap" autoMapping="true"> //autoMapping 为自动匹配 userEvaluate 属性
<id column="id" property="id"></id> //这里一定要写
<collection property="tagScore" ofType="TagScore"> //collection 表示集合
<id column="tagId" property="tagId"/>
<result column="tag" property="tag"/>
<result column="score" property="score"/>
</collection>
</resultMap>
<select id="list" resultMap="userEvaluateMap">
select ue.id,ue.userId,ue.userName,ue.evaluateId,t.tagId,et.score,t.tag from t_user_evaluate ue
left join t_evaluate_tag et on(ue.evaluateId=et.evaluateId) LEFT JOIN t_tag t on (et.tagId=t.tagId)
</select>
结果:
4:IBaits 实现
待续。。。