Mybatis五----关联查询(4)多对多查询

多对多关系,例如学生跟课程之间,就是多对多关系。

实体类:

package com.mybatisdemo.beans;

import java.util.LinkedHashSet;
import java.util.Set;

public class Student {

    private Integer id;
    private String name;
    private Integer age;
    private Teacher teacher;
    
    private Set<Courses> courses = new LinkedHashSet<>();

    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Student(String name, Integer age, Teacher teacher) {
        super();
        this.name = name;
        this.age = age;
        this.teacher = teacher;
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public Teacher getTeacher() {
        return teacher;
    }

    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }

    public Set<Courses> getCourses() {
        return courses;
    }

    public void setCourses(Set<Courses> courses) {
        this.courses = courses;
    }

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

}
package com.mybatisdemo.beans;

public class Courses {

    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

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

}

Dao层对应映射配置文件:

<resultMap type="com.mybatisdemo.beans.Student" id="stuCourseMap">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="age" property="age"/>
        <collection property="courses" ofType="com.mybatisdemo.beans.Courses">
            <id column="course_id" property="id"/>
            <result column="course_name" property="name"/>
        </collection>
    </resultMap>

    <select id="queryStudentById" parameterType="int" resultMap="studentMap">
        select id,name,age,teacher from student where id = #{id}
    </select>

    <select id="queryStudentAndCoursesById" parameterType="int" resultMap="stuCourseMap">
        select a.id,a.name,a.age,b.id as course_id,b.name as course_name from 
            student a,courses b, stu_course_rel r where a.id = r.stu_id and b.id = r.course_id and a.id = #{id}
    </select>

测试类:

    @Test
    public void testSelectStudentAndCourse() {
        StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
        Student student = studentDao.queryStudentAndCoursesById(1);
        System.out.println(student);
    }    

PS:数据库表结构

create table if not exists courses(
    id int(10) not null primary key,
    name varchar(25)
) charset utf8;

create table if not exists stu_course_rel(
    stu_id int(10),
    course_id int(10),
    foreign key(stu_id) references student(id),
    foreign key(course_id) references courses(id)
) charset utf8;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-Plus是一款MyBatis的增强工具,它提供了很多实用的功能,比如一对多的关联查询。在MyBatis-Plus中,一对多的关联查询可以通过使用@TableName注解和@TableField注解来实现。 假设我们有两张表,一张是学生表,另一张是课程表,一个学生可以选多门课程,那么我们就可以用一对多关联查询查询某个学生选的所有课程。 首先,在学生表中定义一个属性List<Course> courses,并使用@TableField注解将该属性与课程表的外键关联起来: ``` public class Student { @TableId private Long id; private String name; @TableField(exist = false) private List<Course> courses; } ``` 然后,在课程表中定义一个属性Long studentId,并使用@TableField注解将该属性与学生表的主键关联起来: ``` public class Course { @TableId private Long id; private String name; @TableField("student_id") private Long studentId; } ``` 最后,我们使用MyBatis-Plus提供的wrapper类进行关联查询: ``` QueryWrapper<Student> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("id", studentId); List<Student> students = studentMapper.selectList(queryWrapper); for (Student student : students) { QueryWrapper<Course> courseQueryWrapper = new QueryWrapper<>(); courseQueryWrapper.eq("student_id", student.getId()); List<Course> courses = courseMapper.selectList(courseQueryWrapper); student.setCourses(courses); } ``` 以上就是MyBatis-Plus实现一对多关联查询的方法。如果您还有其他问题或需要进一步的帮助,请随时提出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值