Mybatis一对多和多对一处理的深入讲解

网友投稿 667 2022-12-09

Mybatis一对多和多对一处理的深入讲解

Mybatis一对多和多对一处理的深入讲解

目录建表多对一处理mapper实体类按照查询嵌套处理按照结果嵌套处理回顾mysql多对一查询方式一对多处理mapper实体类按照查询嵌套处理按照查询嵌套处理结果映射面试高频点总结

建表

SQL:

create table teacher(

id int not null,

name varchar(30) default null,

primary key (id)

);

insert into teacher (id, name) values (1, '蔡老师');

create table student(

id int not null ,

name varchar(30) default null,

tid int default null,

constraint fk_tid foreign key (tid) references teacher(id)

);

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

多对一处理

多个学生对应一个老师

对于学生这边而言,关联。即多个学生关联一个老师【多对一】

对于老师这边而言,集合。即一个老师有很多的学生【一对多】

mapper

//查询所有的学生信息以及对应的老师的信息

List queryStudentAndTeacher();

实体类

@Data

@AllArgsConstructor

@NoArgsConstructor

public class Student {

private int id;

private String name;

//学生需要关联一个老师

private Teacher teacher;

}

@Data

@AllArgsConstructor

@NoArgsConstructor

public class Teacher {

private int id;

private String name;

}

按照查询嵌套处理

select * from student

select * from teacher where id = #{id}

按照结果嵌套处理

<select id="queryStudentAndTeacher2" resultMap="rStuAndTea2">

select s.id sid, s.name sname, t.name tname

from student s, teacher t

where s.tid = t.id

回顾Mysql多对一查询方式

子查询

联表查询

一对多处理

一个老师有多个学生

对于老师这边而言,集合。即一个老师有很多的学生【一对多】

mapper

//查询指定老师的信息及其所有的学生

Teacher queryTeaAndStu(@Param("tid") int id);

实体类

@Data

@AllArgsConstructor

@NoArgsConstructor

public class Teacher {

private int id;

private String name;

//一个老师拥有多个学生

private List students;

}

@Data

@AllArgsConstructor

@NoArgsConstructor

public class Student {

private int id;

private String name;

private int tid;

}

按照查询嵌套处理

select s.id sid, s.name sname, t.name tname, t.id tid

from student s, teacher t

where s.tid = t.id and t.id = #{tid}

按照查询嵌套处理

select * from teacher where id = #{tid}

select="queryStudentByTeacherId" column="id"/>

select * from student where tid = #{tid}

结果映射

面试高频点

MySQL引擎

InnoDB底层原理

索引

索引优化

小结

关联 - association 【多对一】

集合 - collection 【一对多】

javaType & ofType

javaType 用来指定实体类中属性的类型

ofType 用来指定映射到List或者集合中的entity类型,泛型中的约束类型

注意点:

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

注意一对多和多对一中属性名和字段的问题

如果问题不好排查错误,可以使用LOG4J日志

总结

select="queryStudentByTeacherId" column="id"/>

select * from student where tid = #{tid}

结果映射

面试高频点

MySQL引擎

InnoDB底层原理

索引

索引优化

小结

关联 - association 【多对一】

集合 - collection 【一对多】

javaType & ofType

javaType 用来指定实体类中属性的类型

ofType 用来指定映射到List或者集合中的entity类型,泛型中的约束类型

注意点:

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

注意一对多和多对一中属性名和字段的问题

如果问题不好排查错误,可以使用LOG4J日志

总结

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于springboot activiti 配置项解析
下一篇:Mockito mock Kotlin Object类方法报错解决方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~