MyBatis多表关联查询

本文详细介绍了在MyBatis中如何进行多表关联查询,包括一对多、多对一和多对多的查询示例。通过创建测试数据库、实体类和配置文件,展示了数据持久化层、业务逻辑层和访问控制层的实现过程,以及如何处理查询结果的展示。
摘要由CSDN通过智能技术生成

本文将向大家介绍 MyBatis 中的多表关联查询

主要通过两个示例来说明在 MyBatis 中如何实现 一对多,多对一 和 多对多 查询

第一个示例:老师和学生关联

​ 老师和学生是一对多的关系,一名老师管教多名学生

​ 学生和老师是多对一的关系,多名学生被一名老师管教

​ 那么如何查询所有学生以及管教他们的老师呢?

​ 又如何查询所有老师和他所管教的学生呢?

第二个示例:账户和课程关联

​ 在网上选课系统中,账户和课程是多对多关系,

​ 一个账户可以选择多门课程,而一门课程也可以被多个账户选择

​ 那么如何查询账户以及此账户所选择的课程呢?

​ 又如何查询课程以及选择这门课程的账户呢?

下面我们就来一步一步解决这两个问题吧

一、搭建测试环境(一对多和多对一)

(一)创建测试数据库
CREATE TABLE `t_teacher` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

CREATE TABLE `t_student` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT NULL,
  `tid` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

image-20210810120108788

mybatis多表查询-学生数据表


(二)根据测试数据库创建实体类
  1. 学生类

    package com.jarreet.test.pojo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.ToString;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @ToString
    public class Student {
         
        private Integer id;
        private String name;
        private Integer tid;
    
        // 学生关联一个老师
        private Teacher teacher;
    }
    

  2. 老师类

package com.jarreet.test.pojo;

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

import java.util.ArrayList;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Teacher {
   
    private Integer id;
    private String name;

    // 老师关联一群学生
    private List<Student> studentList = new ArrayList<>();
}


(三)文件配置
  1. 在 application.yml 配置 mybatis

    mybatis:
      type-aliases-package: com.jarreet.test.pojo
      mapper-locations: classpath:mapper/*.xml
      configuration:
        map-underscore-to-camel-case: true
    

  2. 在 TestApplication 启动类上加上包扫描注解

    @MapperScan("com.jarreet.test.dao")
    

二、多对一查询

我们根据上面搭建的环境,给出一个查询需求:查询所有学生的信息及他们的老师

(一)数据持久化层
  1. StudentDao.java

    package com.jarreet.test.dao;
    
    import com.jarreet.test.pojo.Student;
    import org.springframework.stereotype.Repository;
    
    import java.util.List;
    
    @Repository
    public interface StudentDao {
         
    
        public List<Student> getAllStudents();
    }
    

  2. StudentMapper.xml

    <?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="com.jarreet.test.dao.StudentDao">
    
        <!-- 查询文章管理列表多对一配置 -->
        <resultMap id="studentAndTeacher" type="com.jarreet.test.pojo.Student">
            <id property="id" column="sid"/>
            <result property="name" column="sname"/>
            <result property="tid" column="stid"/>
            <association property="teacher" javaType="com.jarreet.test.pojo.Teacher">
                <id property="id" column="tid"/>
                <result property="name" column="tname"/>
            </association&g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值