Ibatis/MyBaits 1:N 一对多关系 处理

来源:互联网 发布:js中offsettop 编辑:程序博客网 时间:2024/06/02 19:41

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;    }}

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 实现

待续。。。

0 0
原创粉丝点击