Mybatis关联查询【附实战案例】

目录

一、Mybatis一对一关联查询

1. 新增持久层接口方法

2. 新增映射文件对应的标签

3. 新增测试方法

4. 运行效果

二、Mybatis一对多关联查询

1. 新增持久层接口方法

2. 新增映射文件对应的标签

3. 新增测试方法

4. 运行效果

三、Mybatis多对多关联查询

1. 新增持久层接口方法

2. 新增映射文件对应的标签

3. 新增测试方法

4. 运行效果

四、进阶查询班级信息

1. 新增持久层接口方法

2. 新增映射文件对应的标签

3. 新增测试方法

4. 运行效果


一、Mybatis一对一关联查询

        查询学生时,将关联的一个班级对象查询出来,就是一对一关联查询。这里还新增了几个实体类

新增Classes实体类

package com.example.pojo;

import java.util.List;

public class Classes {
    private int cid;
    private String className;
    private List studentList;
    private List teacherList;

    public int getCid() {
        return cid;
    }

    public void setCid(int cid) {
        this.cid = cid;
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public List getStudentList() {
        return studentList;
    }

    public void setStudentList(List studentList) {
        this.studentList = studentList;
    }

    public List getTeacherList() {
        return teacherList;
    }

    public void setTeacherList(List teacherList) {
        this.teacherList = teacherList;
    }

    @Override
    public String toString() {
        return "Classes[ " +
                "cid=" + cid +
                ", className='" + className + '\'' +
                ", studentList=" + studentList + '\'' +
                ", teacherList=" + teacherList +
                " ]";
    }
}

新增Student实体类

package com.example.pojo;

public class Student {
    private int sid;
    private String name;
    private int age;
    private String sex;
    private Classes classes;

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Classes getClasses() {
        return classes;
    }

    public void setClasses(Classes classes) {
        this.classes = classes;
    }

    @Override
    public String toString() {
        return "Student[ " +
                "sid=" + sid +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", classes=" + classes +
                " ]";
    }
}

新增Teacher实体类 

package com.example.pojo;

import java.util.List;

public class Teacher {
    private Integer tid;
    private String tname;
    private List classes;

    public Integer getTid() {
        return tid;
    }

    public void setTid(Integer tid) {
        this.tid = tid;
    }

    public String getTname() {
        return tname;
    }

    public void setTname(String tname) {
        this.tname = tname;
    }

    public List getClasses() {
        return classes;
    }

    public void setClasses(List classes) {
        this.classes = classes;
    }

    @Override
    public String toString() {
        return "Teacher[ " +
                "tid=" + tid +
                ", tname='" + tname + '\'' +
                ", classes=" + classes +
                " ]";
    }
}

1. 新增持久层接口方法

package com.example.mapper;

import com.example.pojo.Student;

import java.util.List;

public interface StudentMapper {
    List findAll();
}

2. 新增映射文件对应的标签

StudentMapper.xml映射文件




    
        
        
        
        
        
        
        
        
            
            
            
            
        
    
    
    

3. 新增测试方法

    @Test
    public void testFindAll(){
        StudentMapper studentMapper = session.getMapper(StudentMapper.class);
        List all = studentMapper.findAll();
        all.forEach(System.out::println);
    }

4. 运行效果

Mybatis关联查询【附实战案例】_第1张图片

Ok,从运行效果来看确实查询出来每个学生对应的班级了 

二、Mybatis一对多关联查询

查询班级时,将关联的学生集合查询出来,就是一对多关联查询。

1. 新增持久层接口方法

package com.example.mapper;

import com.example.pojo.Classes;

import java.util.List;

public interface ClassesMapper {
    List findAll();
}

2. 新增映射文件对应的标签




    
        
        
        
        
            
            
            
            
        
    

    
    

3. 新增测试方法

// 测试查询一对多关联查询
    @Test
    public void testFindAllClasses(){
        ClassesMapper classesMapper = session.getMapper(ClassesMapper.class);
        List all = classesMapper.findAll();
        all.forEach(System.out::println);
    }

4. 运行效果

Mybatis关联查询【附实战案例】_第2张图片

OK,观察运行效果,确实是将每个班级对应的学生都查询出来了。 

三、Mybatis多对多关联查询

MyBatis多对多关联查询本质就是两个一对多关联查询。

例如有老师类和班级类:

一个老师对应多个班级,也就是老师类中有一个班级集合属性。

一个班级对应多个老师,也就是班级类中有一个老师集合属性。

本次我们的目的就是查询各个老师对应所教的的班级,并且各个班级的老师也一并查询出来,这里有点拗口。稍加理解即可。

1. 新增持久层接口方法

package com.example.mapper;

import com.example.pojo.Teacher;

import java.util.List;

public interface TeacherMapper {
    List findAll();
}

2. 新增映射文件对应的标签




    
        
        
        
            
            
        
    
    

3. 新增测试方法

// 测试多对多关联查询
    @Test
    public void testFindAllTeacher(){
        TeacherMapper teacherMapper = session.getMapper(TeacherMapper.class);
        List all = teacherMapper.findAll();
        all.forEach(System.out::println);
    }

4. 运行效果

Mybatis关联查询【附实战案例】_第3张图片

        OK,这里也是可以查询出每个老师教的班级,一个班级有多个老师,一个老师可以对应多个 班级,这就是多对多查询

四、进阶查询班级信息

        因为在前面,我们查询所有班级信息的时候,老师列表是空的,现在如果想查询班级时,将关联的老师集合查询出来,只需要修改班级映射文件的Sql语句和 即可:

1. 新增持久层接口方法

List findAll1();

2. 新增映射文件对应的标签

    
    
        
        
        
        
            
            
            
            
        
        
            
            
        
    

    
    

3. 新增测试方法

    @Test
    public void testFindAllClasses1(){
        ClassesMapper classesMapper = session.getMapper(ClassesMapper.class);
        List all = classesMapper.findAll1();
        all.forEach(System.out::println);
    }

4. 运行效果

OK,可以看到查询班级信息的时候确实将老师列表也查询出来了。

你可能感兴趣的:(ssm框架,#,Mybatis,mybatis,java,mysql,maven)