Mybatis多表联结查询高级结果映射

2 篇文章 0 订阅
1 篇文章 0 订阅

假设需要联结一个app表和evaluation表
1.在被联结表(这里是evaluation表)的mapper.xml文件里新建一个resultMap,列表中添加需要获取的字段:

<resultMap id="EvaluationJoinMap" type="包名.model.Evaluation"
        extends="BaseResultMap">
        <id property="id" column="evaluation_id" />
        <result property="appId" column="evaluation_app_id" />
</resultMap>

(property值是Evaluation.java里的一个属性字段,column值取后面第三步查询语句里相应的别名,联结表后有冲突的字段取别名)

2.在联结表(这里是app表)的mapper.xml文件里新建一个resultMap:

<resultMap type="包名.model.App" id="EvaluationResultMap"
        extends="BaseResultMap">
        <collection property="appEvaluationList" javaType="list" ofType="包名.model.Evaluation"
            resultMap="包名.dao.EvaluationMapper.EvaluationJoinMap">
        </collection>
</resultMap>

(特别说明:我的EvaluationMapper.xml放在mapper层下,但是引用地址是”包名.dao.EvaluationMapper.EvaluationJoinMap”,是因为在mapper.xml文件中有一句将地址指向这里)

3.在联结表(这里是app表)的mapper.xml文件里新建一条查询语句:

<select id="getAppEvaluation" resultMap="EvaluationResultMap">
        select app.* ,
        evaluation.id
        evaluation_id,
        evaluation.app_id evaluation_app_id,
        from
        app join
        evaluation on
        app.id =
        evaluation.app_id
</select>

4.特别重要容易被人忽视的一步,在第二步新建的resultMap中新建了一个property为appEvaluationList的,这个property需要在App.java中添加,不添加就会报错(There is no getter for property named ‘appEvaluationList’ in ‘class 包名.model.App’):

@Transient
    List<Evaluation> appEvaluationList;

    public List<Evaluation> getAppEvaluationList() {
        return appEvaluationList;
    }

    public void setEvaluationList(List<Evaluation> appEvaluationList) {
        this.appEvaluationList = appEvaluationList;
    }

这篇文章是根据我自己的工程加经验来写的,如果有疑问,欢迎探讨。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值