多对一处理
如,
- 多个学生,对应一个老师
- 多个学生关联一个老师(多对一)
- 一个老师有很多学生(一对多)
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接口或文件
- 测试查询是否成功
按照查询嵌套处理
按照结果嵌套处理
回顾对比Mysql多对一查询方式:
- 子查询
- 联表查询
一对多处理
步骤:
-
环境搭建
-
实体类
@Data
public class Student {
private int id;
private String name;
private int tid;
}
@Data
public class Teacher {
private int id;
private String name;
private List students;
}
- 按照结果嵌套处理
- 按照查询嵌套处理
小结
- 关联 association多对一
- 集合 collection 一对多
- javaType 和 ofType
- JavaType 用来指定实体类中属性的类型
- ofType 用来指定映射到List中的pojo类型,泛型中的约束类型
注意点:
-
保证SQL的可读性,尽量通俗易懂
-
注意属性名和字段名区别
-
可以使用日志排除错误,推荐Log4j
面试高频
- Mysql引擎
- InnoDB底层原理
- 索引
- 索引优化