9.多对一

多对一

什么是多对一?

  • 举一个学生和老师的例子,一个老师可以教多个学生,同时多个学生可以被一个老师教

  • 对于学生而言,多个学生关联一个老师

  • 对于老师而言是一个集合(集合里面包含多个学生)

 association–:一个复杂类型的关联;许多结果将包装成这种类型
 嵌套结果映射 – 关联可以是 `resultMap` 元素,或是对其它结果映射的引用
 collection: 一个复杂类型的集合
 嵌套结果映射 – 集合可以是 `resultMap` 元素,或是对其它结果映射的引用

第一步:创建两张表(学生表、教师表)

 CREATE TABLE `teacher` (
 `id` INT(10) NOT NULL,
 `name` VARCHAR(30) DEFAULT NULL,
 PRIMARY KEY (`id`)
 ) ENGINE=INNODB DEFAULT CHARSET=utf8
 ​
 INSERT INTO teacher(`id`, `name`) VALUES (1, '秦老师');
 ​
 CREATE TABLE `student` (
 `id` INT(10) NOT NULL,
 `name` VARCHAR(30) DEFAULT NULL,
 `tid` INT(10) DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `fktid` (`tid`),
 CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
 ) ENGINE=INNODB DEFAULT CHARSET=utf8
 INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('1', '小明', '1');
 INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('2', '小红', '1');
 INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('3', '小张', '1');
 INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('4', '小李', '1');
 INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('5', '小王', '1');

第二步:创建实体类

 //学生类
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
 public class Student implements Serializable {
     private Integer id;
     private String name;
 ​
     //让学生关联老师
     private Teacher teacher;
 ​
 }
 //老师类
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
 public class Teacher implements Serializable {
 ​
     private Integer id;
     private String name;
 }

第三步:编写mapper接口和mapper配置文件(配置文件创建的位置要跟接口一一对应)

 public interface StudentMapper {
 ​
     @Select("select * from student where id=#{id}")
     Student findById(@Param("id") Integer id)throws Exception;
 }
 public interface TeacherMapper {
 }
 <?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">
 <!--namespace命名空间 这里就改个名字就行-->
 <mapper namespace="com.xuan.mapper.TeacherMapper">
 ​
 </mapper>
 第四步:编写主配置文件
 <!-- mappers 元素则包含了一组映射器(mapper),这些映射器的 XML 映射文件包含了 SQL 代码和映射定义信息。-->
 <mappers>
     <package name="com.xuan.mapper"/>
 </mappers>

第五步:编写测试

 public class TestStudent {
 ​
     @Test
     public void testFindById() throws Exception {
         SqlSession sqlSession = MyBatisUtil.getSqlSession();
         StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
 ​
         Student student = mapper.findById(1);
 ​
         System.out.println(student);
         sqlSession.close();
    }
 }

-------------------------------------测试成功------------------------------------------------

上一篇:南通大学考研电子信息822数据结构


下一篇:“2018宁夏邀请赛 ” 兼 “The 2019 Asia Yinchuan First Round Online Programming”