07-多对一和一对多处理

多对一处理

如,

  • 多个学生,对应一个老师
  • 多个学生关联一个老师(多对一)
  • 一个老师有很多学生(一对多)

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);

测试环境搭建

  1. 导入lombok
  2. 新建实体类Teacher,Student
  3. 建立Mapper接口
  4. 建立Mapper.xml文件
  5. 在核心配置文件中绑定注册Mapper接口或文件
  6. 测试查询是否成功

按照查询嵌套处理





    
    


按照结果嵌套处理




    
    
    
        
    

回顾对比Mysql多对一查询方式:

  • 子查询
  • 联表查询

一对多处理

步骤:

  1. 环境搭建

  2. 实体类

@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;
}
  1. 按照结果嵌套处理


    
    
    
        
        
        
    

  1. 按照查询嵌套处理


    


小结

  1. 关联 association多对一
  2. 集合 collection 一对多
  3. javaType 和 ofType
    1. JavaType 用来指定实体类中属性的类型
    2. ofType 用来指定映射到List中的pojo类型,泛型中的约束类型

注意点:

  • 保证SQL的可读性,尽量通俗易懂

  • 注意属性名和字段名区别

  • 可以使用日志排除错误,推荐Log4j

面试高频

  • Mysql引擎
  • InnoDB底层原理
  • 索引
  • 索引优化

你可能感兴趣的:(07-多对一和一对多处理)