編程改變世界(8)-- mybatis中的一對多映射

上次的文章中我們學(xué)習(xí)了一對一映射,這次我們來學(xué)習(xí)一對多映射
我們可以想象這樣一個場景,一個班里會有很多學(xué)生,但是一名學(xué)生只屬于一個班,這就是典型的一對多的關(guān)系
那我們就來建立一個學(xué)生表,tb_student,如下


image.png

依次建立pojo類,修改之前的classesMapper

package com.pojo;

public class Student {
    
    private int id;
    private String name;
    private int c_id;

    public Student() {
    }

    public Student(int id, String name, int c_id) {
        this.id = id;
        this.name = name;
        this.c_id = c_id;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getC_id() {
        return c_id;
    }

    public void setC_id(int c_id) {
        this.c_id = c_id;
    }

    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", c_id=" + c_id + "]";
    }
    
    

}

第一種寫法,使用ofType

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.classesMapper">

    <select id="findClassesById" resultMap="classesMap">
        select * from tb_class where id=#{id}
    </select>
    <select id="findClasses" resultMap="classesMap">
        select * from tb_class c
        inner join tb_teacher t on t.id = c.t_id
        inner join tb_student s on s.c_id = c.id
    </select>
    <resultMap id="classesMap" type="Classes">
        <id property="id" column="id"/>
        <result property="name" column="c_name"/>
        <association property="teacher" select="mapper.teacherMapper.findTeacherById" column="t_id"/>
        <collection property="students" ofType="Student">
            <id property="id" column="sid"/>
            <result property="name" column="name"/>
        </collection>

    </resultMap>

</mapper>

第二種寫法,使用select

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.classesMapper">

    <select id="findClassesById" resultMap="classesMap">
        select * from tb_class where id=#{id}
    </select>
    <select id="findClasses" resultMap="classesMap">
        select * from tb_class c
        inner join tb_teacher t on t.id = c.t_id
        inner join tb_student s on s.c_id = c.id
    </select>
    <resultMap id="classesMap" type="Classes">
        <id property="id" column="id"/>
        <result property="name" column="c_name"/>
        <association property="teacher" select="mapper.teacherMapper.findTeacherById" column="t_id"/>
        <collection property="students" select="mapper.studentMapper.findStudentByClassesId" column="id"/>
    </resultMap>

</mapper>

這時就要加上studentMapper

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.studentMapper">
    <select id="findStudentByClassesId" resultType="Student">
        select * from tb_student where c_id=#{id}
    </select>
</mapper>

最后我們進行測試

package com.test;


import com.dao.ClassesDao;
import com.pojo.Classes;

import java.util.List;

public class Test {

    public static void main(String[] args) {

        ClassesDao classesDao = new ClassesDao();
        List<Classes> list = classesDao.findClasses();
        int i = 0;
        for (Classes classes:list
             ) {
            System.out.println("班級名稱:"+classes.getName()+" 教師名稱"+classes.getTeacher().getName()+" 學(xué)生名稱"+classes.getStudents().get(i).getName());
            i++;
        }


    }
}

輸出結(jié)果


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ??本文針對MyBatis的關(guān)聯(lián)映射,重點在于:(1)不同的關(guān)聯(lián)關(guān)系(一對一、一對多、多對多)如何創(chuàng)建數(shù)據(jù)表和在對...
    secondtown閱讀 4,309評論 0 0
  • MYSQL 基礎(chǔ)知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 8,060評論 5 115
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,011評論 0 11
  • 在你生命中最重要的兩個日子,一個是你出生的那一天,和你懂得生命意義的那一天?!?馬克·吐溫 前兩天,當我第一次看...
    朱敏_5fb2閱讀 996評論 0 0
  • 時光,如果我拋棄一切跟你走,你還能等我多久?從你拋棄的時候,你就注定失去我。
    慕家小兒郎閱讀 249評論 1 0

友情鏈接更多精彩內(nèi)容