mybatis中的连表查询

本文介绍了在 MyBatis 中如何进行连表查询,包括从多对一的角度出发,通过 SQL 查询获取学生信息的同时携带班级信息。实体类的设计与 XML 配置文件中的查询方法展示了一种实现方式,同时提及了使用 Map 封装查询结果的不推荐做法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 多对一 : 从多的一方来查询一的一方,根据学生id查询学生信息并携带班级信息。

select * from tb_stu s join tb_class c on s.class_id=c.cid where stu_id=1 

实体类:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
    private int id;
    private String name;
    private int age;
    private String sex;
    private Integer classId;
    //学生所属的班级
    private Clazz clazz;
}

把联表查询体现到实体类上。

package com.lmy.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Clazz {
    private Integer cid;
    private String cname;
}

xml:

<resultMap id="baseMap" type="com.lmy.entity.Student">
            
            <id column="stu_id" property="id"/>
            <result column="stu_name" property="name"/>
            <result column="stu_age" property="age"/>
            <result column="sex" property="sex"/>
            <result column="class_id" property="classId"/>
                 <!--association: 表示一的一方
                 property: 属性名
                 javaType: 该属性名对应的数据类型
            -->
            <association property="clazz" javaType="com.lmy.entity.Clazz">
                <id column="cid" property="cid"/>
                <result column="cname" property="cname"/>
            </association>
    </resultMap>
    <select id="findStudentById" resultMap="baseMap">
         select * from tb_stu s join tb_class c on s.class_id=c.cid where stu_id=#{id}
    </select>

方法二 :

返回类型就用map封装(不推荐 )

根据学生编号查询学员信息以及班级信息

 public Map findById(Integer id);

 <!--key:value-->
    <select id="findById" resultType="java.util.Map">
        select <include refid="aa"/> from tb_stu s join tb_class c on s.class_id=c.id where s.id=#{id}
    </select>


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值