Mybatis 一对一association,一对多collection。

首先要分清各级关系,哪个表跟哪个表是一对一,哪个是一对多。

<resultMap id="BaseResultMap1" type="com.lucun.student.db.entity.UserInfo">
    <!--
     显示班级学生成绩
   -->
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <association property="aClass" javaType="com.lucun.student.db.entity.Class">
      <result column="cname" jdbcType="VARCHAR" property="name" />
    </association>
    <collection property="score" ofType="com.lucun.student.db.entity.Score">
      <result column="score" jdbcType="VARCHAR" property="score" />
    <association property="subject" javaType="com.lucun.student.db.entity.Subject">
      <result  column="sname" jdbcType="VARCHAR" property="name"/>
    </association>
    </collection>
  </resultMap>

我的表userInfo跟Class是一对一,和Score是一对多,Score和Subject表是一对一,一对一用association,一对多用collection。

其中userInfo表是在最外层,根据用户的id来对应用户的班级是一对一,根据用户的id对应成绩是一对多,用户表不与学科表直接对应,成绩表与学科表是一对一的关系,所以学科表嵌套在成绩表里面。

实体的对应关系

 	private Class aClass;

    private Subject subject;

    private List<Score> score;

userInfo实体里包含需要链接的三个表(省略set,get),一对多需要集合来接收数据。

 private Subject subject;

    public Subject getSubject() {
        return subject;
    }

    public void setSubject(Subject subject) {
        this.subject = subject;
    }

Score包含Subject所以实体里也需要包含。

附上sql语句(这里只是单纯测试效果,实际应用中没有需要条件不会写死)

SELECT c.`id`,u.`name`,j.name sname,c.`score`,g.name cname FROM score c JOIN user_info u ON c.sid=u.id JOIN class g ON g.id=u.sclass JOIN `subject` j ON j.id=c.sub WHERE u.sclass=2

查询结果
在这里插入图片描述
Api接口测试结果
对应查询的userInfo表的id,name。
在这里插入图片描述
对应class表的id,name
在这里插入图片描述
对应score表的name
在这里插入图片描述
对应subject表的name
在这里插入图片描述
其中重复的字段比如name 需要用别名
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值