Mybatis 一对多查询(仅限两个表)

目录

一、创建两个表(一个主表,一个子表)

二、创建两个表对应的实体类

三、创建ClassesMapper接口

四、创建ClassesMapper.xml来实现上述接口

五、使用select标签查询


一、创建两个表(一个主表,一个子表)

这里以一个班级对应多个学生为例

班级class是主表:

 CREATE TABLE class(
      c_id INT PRIMARY KEY AUTO_INCREMENT, 
      c_name VARCHAR(20), 
);

INSERT INTO class(c_name, teacher_id) VALUES('class_a', 1);
INSERT INTO class(c_name, teacher_id) VALUES('class_b', 2);

学生student是子表:

CREATE TABLE student(
    s_id INT PRIMARY KEY AUTO_INCREMENT, 
    s_name VARCHAR(20), 
    c_id INT       #这个字段的目的是关联班级表class,该字段名最好和主表的主键字段名一致
);
INSERT INTO student(s_name, class_id) VALUES('student_A', 1);
INSERT INTO student(s_name, class_id) VALUES('student_B', 1);
INSERT INTO student(s_name, class_id) VALUES('student_C', 1);
INSERT INTO student(s_name, class_id) VALUES('student_D', 2);
INSERT INTO student(s_name, class_id) VALUES('student_E', 2);
INSERT INTO student(s_name, class_id) VALUES('student_F', 2);

注意:子表关联主表的字段  最好和主表的主键字段名一致

二、创建两个表对应的实体类

在查询主表的同时,还要查询子表的内容,那么子表的内容放在哪呢,到时就会映射到这个对象上。(不要忘记添加set和get函数)

主表对应的实体类Classes

public class Classes {

    //定义实体类的属性,与class表中的字段对应
    private int cid;          
    private String cName;    

    private List<Student> students;

    //get和set函数
}

子表 对应的实体类Student

public class Student {

    //定义属性,和student表中的字段对应
    private int sid;           
    private String sName;   
    private int cid; 

    //get和set函数
}

三、创建ClassesMapper接口

声明一个查询接口

List<Classes> selectMultipleTables(int id);

四、创建ClassesMapper.xml来实现上述接口

<!--
     property —— 实体类的属性名
     column   —— 属性名对应哪个字段名(这里其实就相当于给实体类的属性和表的字段建立映射关系)
     association 一般用于一对一查询,collection 一般用于一对多查询
     collection:
         property —— 在Classes类里声明的对象名
         ofType   —— 对象属于哪个自定义类
-->

<resultMap type="com.example.demo.entity.Classes" id="ClassResultMap3">
        <id property="cid" column="c_id"/>
        <result property="cName" column="c_name"/>

        <!-- ofType指定students集合中的对象类型 -->
        <collection property="students" ofType="com.example.demo.entity.Student">
            <id property="sid" column="s_id"/>
            <result property="sName" column="s_name"/>
        </collection>
</resultMap>

五、使用select标签查询

这里要和第三部分的接口声明对应起来。

id —— 接口函数名

resultMap —— 第四部分定义的一个结果集的id

#{id} —— 这里的id就是接口函数的形参


<select id="selectMultipleTables" parameterType="int" resultMap="ClassResultMap3">
    select * from 
                class c,
                student s 
    where 
            c.c_id=#{id}
      and 
            c.C_id=s.class_id
</select>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值