10、多对一处理
多对一:
-
多个学生,对应一个老师
-
对于学生而言:关联,多个学生关联一个老师
-
对于老师而言:集合,一个老师,有很多学生
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');
SHOW TABLES;
SELECT * FROM student;
10.1、测试环境搭建
-
导入Lombok
-
新建实体类:Student、Teacher
-
建立Mapper接口
-
建立Mapper.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="cn.edu.cxtc.dao.TeacherMapper"> </mapper>
-
在核心配置文件中注册绑定我们的Mapper接口或者接口的配置文件 -->三种方式
<!--绑定配置文件--> <!--<mappers>--> <!--<mapper resource="cn/edu/cxtc/dao/StudentMapper.xml"></mapper>--> <!--<mapper resource="cn/edu/cxtc/dao/TeacherMapper.xml"></mapper>--> <!--</mappers>--> <!-- 将包内的映射器接口实现全部注册为映射器 --> <mappers> <package name="cn.edu.cxtc.dao"></package> </mappers>
-
测试查询是否能能够成功
10.2、按照查询嵌套处理
<resultMap id="StudentTeacher" type="student">
<result property="id" column="id"/>
<result property="name" column="name"/>
<!--复杂的属性,我们需要单独处理,association:对象 collection:集合-->
<association property="teacher" column="tid" javaType="teacher" select="getTeacher"/>
</resultMap>
<select id="findAll" resultMap="StudentTeacher">
select * from mybatisdb.student;
</select>
<select id="getTeacher" resultType="teacher">
select * from mybatisdb.teacher;
</select>
//在resultMap中,property是实体类中的属性,column是数据库中的字段属性
<resultMap id="StudentTeacher" type="student">
<result property="id" column="id"/>
<result property="name" column="name"/>
</resultMap>
10.3、mysql中多对一的查询方式
-
子查询
select id, name, tid from student where tid = (select tid from teacher where id = ?);
-
连表查询
select id, name, tid from student s, teacher t where s.tid = t.id;