mybatis学习15:复杂查询环境搭建&多对一处理
-
多对一处理:
-
流程图:
-
多个学生对应一个老师;
-
对于学生而言,就是多对一,所以学生和老师的关系是:关联关系(多个学生关联一个老师)
-
对于老师而言,就是一对多,所以老师和学生的关系是:集合关系(一个老师下面有很多学生)
-
-
关联:
association
:-
association
:一个复杂类型的关联; -
许多结果将包装成这种类型;
-
-
集合:
collection
:-
collection
– 一个复杂类型的集合;
-
-
SQL:通过物理外键实现多对一
-
表结构关系图:
-
脚本:
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');
-
-
测试环境搭建:
-
导入lombok
-
新建实体类Teacher,Student
-
建立Mapper接口
-
建立Mapper.xml
-
把Mapper.xml注册到Mybatis核心配置文件中;
-
测试是否成功!
-
-
多对一的处理:
-
按照查询嵌套处理:类似于子查询
<!--
思路:
1,查询所有的学生信息;
2,根据查询出来的学生tid寻找对应的老师;
-->
<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="getStudent" resultMap="studentTeacher">
select * from student
</select>
<select id="getTeacher" resultType="teacher">
select * from teacher where id=#{tid}
</select> -
按照结果嵌套处理:多表联查
<!--按照结果嵌套处理-->
<resultMap id="studentTeacher2" type="student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<association property="teacher" javaType="teacher">
<result property="name" column="tname"/>
</association>
</resultMap>
<select id="getStudent2" resultMap="studentTeacher2">
select a.id as sid ,a.name as sname,b.name as tname from student a , teacher b where a.tid=b.id
</select>
-
-
回顾Mysql多对一查询方式:
-
子查询
-
联表查询
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律